1. 程式人生 > >numpy的100個練習(一)

numpy的100個練習(一)

Z = np.zeros(10)
print Z
>>>[ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]

2.建立大小為10的,第五個值為1的向量

Z = np.zeros(10)
Z[4] = 1
print Z 
>>>[ 0.  0.  0.  0.  1.  0.  0.  0.  0.  0.]

3.建立一個值是從10到49的向量

>>> Z = np.arange(10,50)
>>> print Z
[10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49]

4.倒置一個xiang向量

>>> Z = np.arange(50)
>>> Z = Z[::-1]
>>> print Z
[49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0]

5.建立一個值是從0到8的3*3矩陣

>>> Z =  np.arange(9).reshape(3,3)
>>> print Z
[[0 1 2]
 [3 4 5]
 [6 7 8]]

6.從[1,2,0,0,4,0]找非零的元素

>>> nz = np.nonzero([1,2,0,0,4,0])
>>> print nz 
(array([0, 1, 4], dtype=int64),)

7.建立一個3*3的單位矩陣(identity matrix)

>>> Z = np.eye(3)
>>> print Z
[[ 1.  0.  0.]
 [ 0.  1.  0.]
 [ 0.  0.  1.]]

8.建立一個3*3*3的隨機陣列

>>> Z= np.random.random((3,3,3))
>>> print Z
[[[ 0.88100043  0.99671944  0.49115181]
  [ 0.79868516  0.91657235  0.93335331]
  [ 0.49822087  0.05067913  0.4659928 ]]

 [[ 0.68226235  0.57003483  0.70215595]
  [ 0.88865496  0.68478705  0.5799058 ]
  [ 0.24645611  0.25517091  0.65551784]]

 [[ 0.14453694  0.14233631  0.9115872 ]
  [ 0.97808973  0.89988026  0.5890676 ]
  [ 0.67648551  0.2011385   0.87718941]]]

9.建立一個10*10的隨機陣列並查詢最大最小值

>>> Z = np.random.random((10,10))
>>> Zmin, Zmax = Z.min(), Z.max()
>>> print Zmin, Zmax
0.0259245459748 0.979047597949

10.建立一個大小為10的向量,並找到平均值(mean value)

>>> Z = np.random.random(30)
>>> m = Z.mean()
>>> print m 
0.419596799849

11.建立一個10*10的陣列,並且邊框是1,裡面是0

>>> Z = np.ones((10,10))
>>> Z[1:-1,1:-1] = 0
>>> print Z
[[ 1.  1.  1.  1.  1.  1.  1.  1.  1.  1.]
 [ 1.  0.  0.  0.  0.  0.  0.  0.  0.  1.]
 [ 1.  0.  0.  0.  0.  0.  0.  0.  0.  1.]
 [ 1.  0.  0.  0.  0.  0.  0.  0.  0.  1.]
 [ 1.  0.  0.  0.  0.  0.  0.  0.  0.  1.]
 [ 1.  0.  0.  0.  0.  0.  0.  0.  0.  1.]
 [ 1.  0.  0.  0.  0.  0.  0.  0.  0.  1.]
 [ 1.  0.  0.  0.  0.  0.  0.  0.  0.  1.]
 [ 1.  0.  0.  0.  0.  0.  0.  0.  0.  1.]
 [ 1.  1.  1.  1.  1.  1.  1.  1.  1.  1.]]

12.下面表達的輸出結果是什麼

0 * np.nan
np.nan == np.nan
np.inf > np.nan
np.nan - np.nan
0.3 == 3 * 0.1
>>> print 0*np.nan,np.nan==np.nan,np.inf>np.nan,np.nan-np.nan,0.3==3*0.1
nan False False nan False

13.建立一個對角線(diagonal)下面是1,2,3,4的5*5矩陣

>>> Z = np.diag(1+np.arange(4),k=-1)
>>> print Z
[[0 0 0 0 0]
 [1 0 0 0 0]
 [0 2 0 0 0]
 [0 0 3 0 0]
 [0 0 0 4 0]]

14.建立一個用國際象棋棋盤團填充的8*8矩陣

>>> Z = np.zeros((8,8),dtype=int)
>>> Z[1::2,::2] = 1
>>> Z[::2,1::2] = 1
>>> print Z
[[0 1 0 1 0 1 0 1]
 [1 0 1 0 1 0 1 0]
 [0 1 0 1 0 1 0 1]
 [1 0 1 0 1 0 1 0]
 [0 1 0 1 0 1 0 1]
 [1 0 1 0 1 0 1 0]
 [0 1 0 1 0 1 0 1]
 [1 0 1 0 1 0 1 0]]

15.考慮一個(6,7,8)形狀的陣列,第一百個元素的索引(x,y,z)是什麼

>>> print np.unravel_index(100,(6,7,8))
(1, 5, 4)

16.用tile函式建立一個8*8的棋盤格矩陣

>>> Z= np.tile(np.array([[0,1],[1,0]]),(4,4))
>>> print Z
[[0 1 0 1 0 1 0 1]
 [1 0 1 0 1 0 1 0]
 [0 1 0 1 0 1 0 1]
 [1 0 1 0 1 0 1 0]
 [0 1 0 1 0 1 0 1]
 [1 0 1 0 1 0 1 0]
 [0 1 0 1 0 1 0 1]
 [1 0 1 0 1 0 1 0]]

17.標準化(normalize)一個5*5的矩陣

>>> Z= np.random.random((5,5))
>>> Zmax,Zmin = Z.max(),Z.min()
>>> Z = (Z - Zmin)/(Zmax - Zmin)
>>> print Z
[[ 0.70496691  0.32518005  0.02003866  0.6112847   0.69277832]
 [ 0.62611846  0.48836881  0.10585828  0.60041398  0.31808683]
 [ 0.10608773  0.68116413  0.3803287   0.87813125  0.28595538]
 [ 1.          0.78836953  0.2813948   0.53334023  0.96452685]
 [ 0.20375579  0.06057498  0.45261834  0.          0.50613968]]

18.一個5*3的矩陣乘上一個3*2的矩陣

>>> Z = np.dot(np.ones((5,3)),np.ones((3,2)))
>>> print Z
[[ 3.  3.]
 [ 3.  3.]
 [ 3.  3.]
 [ 3.  3.]
 [ 3.  3.]]

19.給一個1D陣列,把3到8的數取反

>>> Z = np.arange(11)
>>> Z[(3<Z)&(Z<=8)] *= -1
>>> print Z
[ 0  1  2  3 -4 -5 -6 -7 -8  9 10]

20.建立一個行值是從0到4的5*5矩陣

>>> Z = np.zeros((5,5))
>>> Z += np.arange(5)
>>> print Z
[[ 0.  1.  2.  3.  4.]
 [ 0.  1.  2.  3.  4.]
 [ 0.  1.  2.  3.  4.]
 [ 0.  1.  2.  3.  4.]
 [ 0.  1.  2.  3.  4.]]

21.建立一個發生器函式並用他產生10個迭代數並建立成陣列

>>> def generate():
...     for x in xrange(10):
...         yield x
... 
>>> Z = np.fromiter(generate(),dtype=float,count=-1)
>>> print Z
[ 0.  1.  2.  3.  4.  5.  6.  7.  8.  9.]

22.建立一個大小為10,值在01但不包括01的向量

>>> Z = np.linspace(0,1,12,endpoint=True)[1:-1]
>>> print Z
[ 0.09090909  0.18181818  0.27272727  0.36363636  0.45454545  0.54545455
  0.63636364  0.72727273  0.81818182  0.90909091]

23.建立一個大小為10的向量,並排序

>>> Z = np.random.random(10)
>>> Z.sort()
>>> print Z
[ 0.05201207  0.09472773  0.29629011  0.38814523  0.52893897  0.55463854
  0.65650212  0.7542114   0.76013247  0.76990988]

24.怎麼對一個小陣列求和,比np.sum快

>>> Z = np.arange(10)
>>> print np.add.reduce(Z)
45

24.考慮兩個隨機陣列A,B,檢查他們是否相等

>>> A = np.random.randint(0,2,5)
>>> B = np.random.randint(0,2,5)
>>> equal = np.allclose(A,B)
>>> print equal
False

25.建立一個不可變(只讀)陣列

>>> Z = np.zeros(10)
>>> Z.flags.writeable = False
>>> Z[0] = 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: assignment destination is read-only

26.考慮用一個10*2的矩陣表現笛卡爾座標系(cartesian coordinates),並把他轉換成極座標系(polar coordinates )

>>> Z = np.random.random((10,2))
>>> X, Y = Z[:, 0], Z[:, 1]
>>> R = np.sqrt(X**2+Y**2)
>>> T = np.arctan2(Y, X)
[ 0.90275956  0.18503428  0.87637923  0.38502494  1.25946634  0.44648603
  0.85055944  0.35435378  0.30968286  0.8969317 ] 
[ 0.98835055  0.68139302  0.64921229  1.48097451  0.85664445  0.87587663
  1.05603625  1.44893847  1.09883711  0.00878249]

27.建立一個10*2的矩陣,並把最大值替換為0

>>> Z = np.random.random(10)
>>> Z[Z.argmax()] = 0
>>> print Z
[ 0.          0.71516276  0.15794172  0.53201763  0.66267453  0.49826935
  0.55888094  0.44170191  0.3600852   0.38956545]

28.建立一個xy座標系的結構陣列,並且覆蓋在[0,1]*[1,0]區域內

>>> Z = np.zeros((10,10),[('x',float),('y',float)])
>>> Z['x'],Z['y'] = np.meshgrid(np.linspace(0,1,10),np.linspace(0,1,10))
>>> print Z
[[(0.0, 0.0) (0.1111111111111111, 0.0) (0.2222222222222222, 0.0)  (0.3333333333333333, 0.0)(0.4444444444444444, 0.0)  (0.5555555555555556, 0.0) (0.6666666666666666, 0.0)  (0.7777777777777777, 0.0) (0.8888888888888888, 0.0) (1.0, 0.0)]
 [(0.0, 0.1111111111111111) (0.1111111111111111, 0.1111111111111111) (0.2222222222222222, 0.1111111111111111)  (0.3333333333333333, 0.1111111111111111)  (0.4444444444444444, 0.1111111111111111)  (0.5555555555555556, 0.1111111111111111)  (0.6666666666666666, 0.1111111111111111)  (0.7777777777777777, 0.1111111111111111)  (0.8888888888888888, 0.1111111111111111) (1.0, 0.1111111111111111)]
 [(0.0, 0.2222222222222222) (0.1111111111111111, 0.2222222222222222)  (0.2222222222222222, 0.2222222222222222)  (0.3333333333333333, 0.2222222222222222)  (0.4444444444444444, 0.2222222222222222)  (0.5555555555555556, 0.2222222222222222)  (0.6666666666666666, 0.2222222222222222)  (0.7777777777777777, 0.2222222222222222)  (0.8888888888888888, 0.2222222222222222) (1.0, 0.2222222222222222)]
 [(0.0, 0.3333333333333333) (0.1111111111111111, 0.3333333333333333)  (0.2222222222222222, 0.3333333333333333)  (0.3333333333333333, 0.3333333333333333)  (0.4444444444444444, 0.3333333333333333)  (0.5555555555555556, 0.3333333333333333)  (0.6666666666666666, 0.3333333333333333)  (0.7777777777777777, 0.3333333333333333)  (0.8888888888888888, 0.3333333333333333) (1.0, 0.3333333333333333)]
 [(0.0, 0.4444444444444444) (0.1111111111111111, 0.4444444444444444)  (0.2222222222222222, 0.4444444444444444)  (0.3333333333333333, 0.4444444444444444)  (0.4444444444444444, 0.4444444444444444)  (0.5555555555555556, 0.4444444444444444)  (0.6666666666666666, 0.4444444444444444)  (0.7777777777777777, 0.4444444444444444)  (0.8888888888888888, 0.4444444444444444) (1.0, 0.4444444444444444)]
 [(0.0, 0.5555555555555556) (0.1111111111111111, 0.5555555555555556)  (0.2222222222222222, 0.5555555555555556)  (0.3333333333333333, 0.5555555555555556)  (0.4444444444444444, 0.5555555555555556)  (0.5555555555555556, 0.5555555555555556)  (0.6666666666666666, 0.5555555555555556)  (0.7777777777777777, 0.5555555555555556)  (0.8888888888888888, 0.5555555555555556) (1.0, 0.5555555555555556)]
 [(0.0, 0.6666666666666666) (0.1111111111111111, 0.6666666666666666)  (0.2222222222222222, 0.6666666666666666)  (0.3333333333333333, 0.6666666666666666)  (0.4444444444444444, 0.6666666666666666)  (0.5555555555555556, 0.6666666666666666)  (0.6666666666666666, 0.6666666666666666)  (0.7777777777777777, 0.6666666666666666)  (0.8888888888888888, 0.6666666666666666) (1.0, 0.6666666666666666)]
 [(0.0, 0.7777777777777777) (0.1111111111111111, 0.7777777777777777)  (0.2222222222222222, 0.7777777777777777)  (0.3333333333333333, 0.7777777777777777)  (0.4444444444444444, 0.7777777777777777)  (0.5555555555555556, 0.7777777777777777)  (0.6666666666666666, 0.7777777777777777)  (0.7777777777777777, 0.7777777777777777)  (0.8888888888888888, 0.7777777777777777) (1.0, 0.7777777777777777)]
 [(0.0, 0.8888888888888888) (0.1111111111111111, 0.8888888888888888)  (0.2222222222222222, 0.8888888888888888)  (0.3333333333333333, 0.8888888888888888)  (0.4444444444444444, 0.8888888888888888)  (0.5555555555555556, 0.8888888888888888)  (0.6666666666666666, 0.8888888888888888)  (0.7777777777777777, 0.8888888888888888)  (0.8888888888888888, 0.8888888888888888) (1.0, 0.8888888888888888)]
 [(0.0, 1.0) (0.1111111111111111, 1.0) (0.2222222222222222, 1.0)  (0.3333333333333333, 1.0) 0.4444444444444444, 1.0)  (0.5555555555555556, 1.0) (0.6666666666666666, 1.0)  (0.7777777777777777, 1.0) (0.8888888888888888, 1.0) (1.0, 1.0)]]