python數據分析之--numpy庫

numpy庫是數據分析的基礎包,提供高性能的數組與矩陣運算處理能力;
優點:
1.Numpy的強大之處-向量化操作;
2.NumPy系統是Python的一種開源的數值計算擴展。這種工具可用來存儲和處理大型矩陣;
3.Python自身的嵌套列表(nested list structure)結構要高效的多(該結構也可以用來表示矩陣(matrix));
4.ndarray在存儲數據的時候,數據與數據的地址都是連續的,這樣就給使得批量操作數組元素時速度更快;


# 一:創建數組

In [1 ]:

import numpy as np

data1 = [5, 7, 9, 20]   #列表

arr1 = np.array(data1)arr1

In [3]:

data2 = (5, 7, 9, 20) #元組

arr2 = np.array(data2)
arr2

Out[3]:

array([ 5,  7,  9, 20])

In [4]:

 

data3 = [[1, 2, 3, 4],[5, 6, 7, 8]]   #多維數組
arr3 = np.array(data3)
arr3

Out[4]:

array([[1, 2, 3, 4],
       [5, 6, 7, 8]])

In [5]:

 

arr3.shape  #查看組的維度 兩行四列

Out[5]:

(2, 4)

In [6]:

 

arr3.dtype  #查看數據類型

Out[6]:

dtype('int32')

In [7]:

 

data4 = [1.2, 2, 3.45, 5]
arr4 = np.array(data4)
arr4

Out[7]:

array([ 1.2 ,  2.  ,  3.45,  5.  ])

In [8]:

 

arr4.dtype

Out[8]:

dtype('float64')

In [9]:

 

np.zeros(8)  #通過zeros()方法創建全爲零的數組

Out[9]:

array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])

In [10]:

 

np.zeros((3,4))

Out[10]:

array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])

In [11]:

 

np.ones(4) #通過ones()方法創建全爲1的數組

Out[11]:

array([ 1.,  1.,  1.,  1.])

In [12]:

 

np.ones((4,6))

Out[12]:

array([[ 1.,  1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.,  1.]])

In [13]:

 

np.empty((2, 2, 2)) #創建沒有具體值的數組(即爲垃圾值的數組)

Out[13]:

array([[[  8.25089629e-322,   2.39127773e-321],
        [  2.47032823e-323,   3.90344271e-316]],

       [[  0.00000000e+000,   2.47032823e-323],
        [  3.90350911e-316,   0.00000000e+000]]])

In [14]:

 

np.arange(10) #arange()函數用於創建數組

Out[14]:

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [15]:

 

arr3

Out[15]:

array([[1, 2, 3, 4],
       [5, 6, 7, 8]])

In [17]:

 

arr5 = np.ones_like(arr3)#通過ones_like()方法中傳入的數組形式創建全爲1的數組
arr5

Out[17]:

array([[1, 1, 1, 1],
       [1, 1, 1, 1]])

In [18]:

 

arr5.dtype

Out[18]:

dtype('int32')

In [19]:

 

data = [[2, 4, 5],[3,5, 7]]
arr = np.array(data)
arr

Out[19]:

array([[2, 4, 5],
       [3, 5, 7]])

 

# 二:數組的屬性:

In [20]:

 

arr.ndim #.ndim爲秩即數據軸的個數

Out[20]:

2

In [21]:

 

arr.size #.元素的總個數

Out[21]:

6

In [22]:

 

arr.itemsize #數組中每個元素的字節大小

Out[22]:

4

In [23]:

 

arr.dtype #數據類型

Out[23]:

dtype('int32')

 


 
# 三:數組類型與變換

In [26]:

 

arr1 = np.arange(5)
arr1

Out[26]:

array([0, 1, 2, 3, 4])

In [27]:

 

arr1.dtype

Out[27]:

dtype('int32')

In [28]:

 

arr2 = np.arange(5,dtype='float64')#數據類型強制定義
arr2

Out[28]:

array([ 0.,  1.,  2.,  3.,  4.])

In [29]:

 

arr2.dtype

Out[29]:

dtype('float64')

In [31]:

 

arr1 = np.arange(6)
arr1

Out[31]:

array([0, 1, 2, 3, 4, 5])

In [32]:

 

arr1.dtype

Out[32]:

dtype('int32')

In [33]:

 

arr2 = arr1.astype(np.float64)#astype()方法,數據類型強制轉換
arr2

Out[33]:

array([ 0.,  1.,  2.,  3.,  4.,  5.])

In [34]:

 

arr2.dtype

Out[34]:

dtype('float64')

In [35]:

 

arr3 = arr1.astype('string_')#astype()方法,數據類型強制轉爲字符串
arr3

Out[35]:

array([b'0', b'1', b'2', b'3', b'4', b'5'],
      dtype='|S11')

In [36]:

 

arr3.dtype

Out[36]:

dtype('S11')

In [38]:

 

arr = np.array([2.3, 7.5, 5.6, 9.8])
arr

Out[38]:

array([ 2.3,  7.5,  5.6,  9.8])

In [39]:

 

arr.astype('int32')

Out[39]:

array([2, 7, 5, 9])

In [40]:

 

arr3

Out[40]:

array([b'0', b'1', b'2', b'3', b'4', b'5'],
      dtype='|S11')

In [42]:

 

arr3.astype(np.int32)

Out[42]:

array([0, 1, 2, 3, 4, 5])

In [43]:

 

arr = np.array(['2', 'hello'])
arr

Out[43]:

array(['2', 'hello'],
      dtype='<U5')

In [44]:

 

arr.astype('int32')#字符串轉int類型報錯
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-44-849446cb6004> in <module>()
----> 1 arr.astype('int32')

ValueError: invalid literal for int() with base 10: 'hello'

In [45]:

 

arr1 = np.arange(10)
arr1.dtype

Out[45]:

dtype('int32')

In [46]:

 

arr2 = np.ones(5)
arr2.dtype

Out[46]:

dtype('float64')

In [47]:

 

arr3 = arr1.astype(arr2.dtype)
arr3.dtype

Out[47]:

dtype('float64')

In [48]:

 

arr = np.arange(3)
arr.dtype

Out[48]:

dtype('int32')

In [49]:

 

arr.astype('float64')

Out[49]:

array([ 0.,  1.,  2.])

In [50]:

 

arr

Out[50]:

array([0, 1, 2])

 


 
# 四.數據重塑合併

In [51]:

 

arr = np.arange(9)
arr

Out[51]:

array([0, 1, 2, 3, 4, 5, 6, 7, 8])

In [52]:

 

arr.reshape((3,3))#通過reshape()方法改變其數組維度,傳入的參數爲新維度的元組

Out[52]:

array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

In [54]:

 

arr = np.array([[3, 4, 5],[1, 2, 3]])
arr.reshape((3,2))

Out[54]:

array([[3, 4],
       [5, 1],
       [2, 3]])

In [55]:

 

arr = np.arange(12)
arr.reshape((3,-1))#參數爲-1表示數組的維度可以通過數據本身來判斷

Out[55]:

array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

In [57]:

 

arr = np.arange(10).reshape((5,2))
arr

Out[57]:

array([[0, 1],
       [2, 3],
       [4, 5],
       [6, 7],
       [8, 9]])

In [58]:

 

arr.ravel()#ravel()方法和reshape()方法相反,即將數據散開

Out[58]:

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [59]:

 

arr

Out[59]:

array([[0, 1],
       [2, 3],
       [4, 5],
       [6, 7],
       [8, 9]])

In [60]:

 

arr.flatten()#flatten()方法將數據扁平化

Out[60]:

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [61]:

 

arr

Out[61]:

array([[0, 1],
       [2, 3],
       [4, 5],
       [6, 7],
       [8, 9]])

In [62]:

 

arr1 = np.arange(12).reshape(3,4)
arr1

Out[62]:

array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

In [70]:

 

arr2 = np.arange(12,24).reshape(3,4)
arr2

Out[70]:

array([[12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23]])

In [71]:

 

np.concatenate([arr1, arr2],axis=0)
#concatenate()方法將數組合並,指定軸方向

Out[71]:

array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23]])

In [72]:

 

np.concatenate([arr1, arr2],axis=1)

Out[72]:

array([[ 0,  1,  2,  3, 12, 13, 14, 15],
       [ 4,  5,  6,  7, 16, 17, 18, 19],
       [ 8,  9, 10, 11, 20, 21, 22, 23]])

In [73]:

 

np.vstack((arr1,arr2))#vstack()方法將數組合並

Out[73]:

array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23]])

In [74]:

 

np.hstack((arr1, arr2))#hstack()方法將數組合並

Out[74]:

array([[ 0,  1,  2,  3, 12, 13, 14, 15],
       [ 4,  5,  6,  7, 16, 17, 18, 19],
       [ 8,  9, 10, 11, 20, 21, 22, 23]])

In [76]:

 

arr = np.arange(12).reshape((6,2))
arr

Out[76]:

array([[ 0,  1],
       [ 2,  3],
       [ 4,  5],
       [ 6,  7],
       [ 8,  9],
       [10, 11]])

In [77]:

 

np.split(arr,[2, 4])#split()方法將數組拆分成多個數組

Out[77]:

[array([[0, 1],
        [2, 3]]), array([[4, 5],
        [6, 7]]), array([[ 8,  9],
        [10, 11]])]

In [78]:

 

arr = np.arange(12).reshape(3,4)
arr

Out[78]:

array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

In [79]:

 

arr.transpose((1,0))
#transpose()方法或者利用屬性T將數組轉置;
#transpose()需要傳入軸編號組成的元組;

Out[79]:

array([[ 0,  4,  8],
       [ 1,  5,  9],
       [ 2,  6, 10],
       [ 3,  7, 11]])

In [80]:

 

arr.T

Out[80]:

array([[ 0,  4,  8],
       [ 1,  5,  9],
       [ 2,  6, 10],
       [ 3,  7, 11]])

In [81]:

 

arr = np.arange(16).reshape((2, 2, 4))
arr

Out[81]:

array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],

       [[ 8,  9, 10, 11],
        [12, 13, 14, 15]]])

In [82]:

 

arr.swapaxes(1, 2)#ndarry的swapaxes()方法用於軸對換;

Out[82]:

array([[[ 0,  4],
        [ 1,  5],
        [ 2,  6],
        [ 3,  7]],

       [[ 8, 12],
        [ 9, 13],
        [10, 14],
        [11, 15]]])

 


 
# 五.隨機數

In [85]:

 

arr = np.random.randint(100, 200, size=(5, 4))
arr
#np.random模塊中利用randint()方法隨機整數 5行4列

Out[85]:

array([[168, 180, 142, 134],
       [100, 106, 107, 147],
       [125, 170, 117, 192],
       [194, 172, 173, 102],
       [171, 171, 193, 180]])

In [87]:

 

arr = np.random.randn(2, 3, 5)
arr
#利用randn()方法產生隨機數爲平均值爲0,標準差爲1的正態分佈隨機數;

Out[87]:

array([[[-0.23022075, -1.53376604, -1.20506611, -0.72058013,  1.69808677],
        [-1.62102742, -1.1053548 ,  0.76182009, -1.24876097, -1.55001938],
        [ 0.04078704,  1.96669076, -2.24999391, -1.08302149,  0.52640131]],

       [[ 0.09381983,  1.16288913, -0.15885707,  0.93718335, -0.72444705],
        [-1.68017525, -0.18660456,  0.01881962,  0.16711124, -1.60857221],
        [ 0.93210884, -0.26899384, -0.35037258, -0.404521  ,  1.07034161]]])

In [88]:

 

arr = np.random.normal(4, 5, size=(3,5))
arr
#利用normal()函數可指定產生隨機數的平均值和標準差的正態分佈數組

Out[88]:

array([[  8.29188165,  -6.11855239,  -1.5724349 ,   6.97515202,
          3.83049015],
       [  2.23989149,   7.81287044, -10.01907046,   3.68896253,
          3.01140917],
       [ 10.68983039,   7.63279875,  10.70678635,   2.66406148,
          3.76512045]])

In [89]:

 

arr = np.random.randint(100, 200, size=(5, 4))
arr

Out[89]:

array([[147, 122, 130, 169],
       [151, 152, 117, 119],
       [129, 140, 111, 131],
       [197, 126, 176, 199],
       [128, 174, 117, 143]])

In [90]:

 

np.random.permutation(arr)#對序列排序

Out[90]:

array([[151, 152, 117, 119],
       [197, 126, 176, 199],
       [128, 174, 117, 143],
       [147, 122, 130, 169],
       [129, 140, 111, 131]])

In [91]:

 

arr

Out[91]:

array([[147, 122, 130, 169],
       [151, 152, 117, 119],
       [129, 140, 111, 131],
       [197, 126, 176, 199],
       [128, 174, 117, 143]])

In [92]:

 

arr = np.random.randint(100, 200, size=(5, 4))
arr

Out[92]:

array([[196, 140, 199, 182],
       [161, 109, 193, 176],
       [102, 138, 165, 166],
       [191, 181, 108, 113],
       [168, 102, 199, 150]])

In [93]:

 

np.random.shuffle(arr)#對序列排序

In [94]:

 

arr

Out[94]:

array([[168, 102, 199, 150],
       [191, 181, 108, 113],
       [102, 138, 165, 166],
       [161, 109, 193, 176],
       [196, 140, 199, 182]])

 


 
# 六.索引和切片

In [1]:

 

import numpy as np
#數組的切片和索引返回都是原始數組的使徒

In [15]:

 

arr = np.arange(10)
arr

Out[15]:

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [16]:

 

arr[3]

Out[16]:

3

In [17]:

 

arr[-1]

Out[17]:

9

In [18]:

 

arr[2] = 123
arr

Out[18]:

array([  0,   1, 123,   3,   4,   5,   6,   7,   8,   9])

In [19]:

 

arr

Out[19]:

array([  0,   1, 123,   3,   4,   5,   6,   7,   8,   9])

In [20]:

 

arr[3] = 88
arr

Out[20]:

array([  0,   1, 123,  88,   4,   5,   6,   7,   8,   9])

In [22]:

 

arr1 = arr[-3:-1]
arr1

Out[22]:

array([7, 8])

In [23]:

 

arr1[:] = 77
arr

Out[23]:

array([  0,   1, 123,  88,   4,   5,   6,  77,  77,   9])

In [24]:

 

arr

Out[24]:

array([  0,   1, 123,  88,   4,   5,   6,  77,  77,   9])

In [26]:

 

arr1 = arr[1].copy()
arr1 = 34
arr

Out[26]:

array([  0,   1, 123,  88,   4,   5,   6,  77,  77,   9])

In [27]:

 

arr = np.arange(15).reshape(3,5)
arr

Out[27]:

array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])

In [28]:

 

arr[0]

Out[28]:

array([0, 1, 2, 3, 4])

In [29]:

 

arr[2]

Out[29]:

array([10, 11, 12, 13, 14])

In [30]:

 

arr

Out[30]:

array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])

In [31]:

 

arr[0][3]

Out[31]:

3

In [32]:

 

arr[2,3]  #兩種方法等價

Out[32]:

13

In [33]:

 

arr = np.arange(12).reshape(2,2,3)
arr

Out[33]:

array([[[ 0,  1,  2],
        [ 3,  4,  5]],

       [[ 6,  7,  8],
        [ 9, 10, 11]]])

In [34]:

 

arr[0]

Out[34]:

array([[0, 1, 2],
       [3, 4, 5]])

In [35]:

 

old = arr[0].copy()
arr[0] = 12
arr

Out[35]:

array([[[12, 12, 12],
        [12, 12, 12]],

       [[ 6,  7,  8],
        [ 9, 10, 11]]])

In [36]:

 

arr[0] = old
arr

Out[36]:

array([[[ 0,  1,  2],
        [ 3,  4,  5]],

       [[ 6,  7,  8],
        [ 9, 10, 11]]])

In [37]:

 

arr

Out[37]:

array([[[ 0,  1,  2],
        [ 3,  4,  5]],

       [[ 6,  7,  8],
        [ 9, 10, 11]]])

In [38]:

 

arr[1, 1]

Out[38]:

array([ 9, 10, 11])

In [39]:

 

arr[0, 1, 2]

Out[39]:

5

In [40]:

 

arr = np.arange(6)
arr

Out[40]:

array([0, 1, 2, 3, 4, 5])

In [41]:

 

arr[2:5]

Out[41]:

array([2, 3, 4])

In [42]:

 

arr = np.arange(12).reshape(4,3)
arr

Out[42]:

array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])

In [44]:

 

arr[2:]

Out[44]:

array([[ 6,  7,  8],
       [ 9, 10, 11]])

In [45]:

 

arr

Out[45]:

array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])

In [46]:

 

arr[:, 1]

Out[46]:

array([ 1,  4,  7, 10])

In [47]:

 

arr[:, 1:2]

Out[47]:

array([[ 1],
       [ 4],
       [ 7],
       [10]])

In [49]:

 

arr[2:, 1:]#只有使用冒號纔會選取整個軸,冒號在前爲列軸,冒號再後爲行軸;

Out[49]:

array([[ 7,  8],
       [10, 11]])

In [56]:

 

#布爾值索引;
fruits = np.array(['apple', 'banana', 'pear', 'banana', 'pear', 'apple', 'pear'])
datas = np.random.randint(-1, 1, size=(7,5))

In [57]:

 

fruits

Out[57]:

array(['apple', 'banana', 'pear', 'banana', 'pear', 'apple', 'pear'],
      dtype='<U6')

In [58]:

 

datas

Out[58]:

array([[ 0, -1,  0,  0, -1],
       [-1, -1,  0,  0, -1],
       [-1,  0, -1, -1,  0],
       [-1,  0,  0, -1,  0],
       [ 0,  0,  0,  0, -1],
       [-1, -1,  0,  0,  0],
       [ 0,  0, -1,  0, -1]])

In [59]:

 

fruits == 'pear'

Out[59]:

array([False, False,  True, False,  True, False,  True], dtype=bool)

In [60]:

 

datas[fruits == 'pear']

Out[60]:

array([[-1,  0, -1, -1,  0],
       [ 0,  0,  0,  0, -1],
       [ 0,  0, -1,  0, -1]])

In [61]:

 

datas[fruits != 'pear']

Out[61]:

array([[ 0, -1,  0,  0, -1],
       [-1, -1,  0,  0, -1],
       [-1,  0,  0, -1,  0],
       [-1, -1,  0,  0,  0]])

In [62]:

 

datas[(fruits == 'apple') | (fruits == 'banana')]

Out[62]:

array([[ 0, -1,  0,  0, -1],
       [-1, -1,  0,  0, -1],
       [-1,  0,  0, -1,  0],
       [-1, -1,  0,  0,  0]])

In [63]:

 

datas[fruits == 'pear',2:]

Out[63]:

array([[-1, -1,  0],
       [ 0,  0, -1],
       [-1,  0, -1]])

In [64]:

 

datas[fruits == 'pear',2]

Out[64]:

array([-1,  0, -1])

In [66]:

 

datas[datas == 0] = 1
datas

Out[66]:

array([[ 1, -1,  1,  1, -1],
       [-1, -1,  1,  1, -1],
       [-1,  1, -1, -1,  1],
       [-1,  1,  1, -1,  1],
       [ 1,  1,  1,  1, -1],
       [-1, -1,  1,  1,  1],
       [ 1,  1, -1,  1, -1]])

In [67]:

 

arr = np.arange(12).reshape(4,3)
arr

Out[67]:

array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])

In [68]:

 

arr[[1, 3, 2]]#花式索引;

Out[68]:

array([[ 3,  4,  5],
       [ 9, 10, 11],
       [ 6,  7,  8]])

In [70]:

 

arr[[3, 2]][:, [2, 1]]

Out[70]:

array([[11, 10],
       [ 8,  7]])

In [71]:

 

arr[np.ix_([3,2],[2, 1])]#np.ix_()函數同樣使用;

Out[71]:

array([[11, 10],
       [ 8,  7]])

 


 
# 七.數組運算

In [72]:

 

a = [1, 2, 3]
b = []
for i in a:
    b.append(i * 10)
b

Out[72]:

[10, 20, 30]

In [73]:

 

arr = np.array([1, 2, 3])
arr * 10

Out[73]:

array([10, 20, 30])

In [74]:

 

arr * arr

Out[74]:

array([1, 4, 9])

In [75]:

 

arr - arr

Out[75]:

array([0, 0, 0])

In [77]:

 

arr = np.random.randn(3,3)
arr

Out[77]:

array([[-1.30289625, -1.62082859, -0.02086977],
       [ 0.61681656,  1.44215576,  1.7281482 ],
       [-0.96761142,  0.6475979 , -0.57524988]])

In [78]:

 

np.abs(arr)

Out[78]:

array([[ 1.30289625,  1.62082859,  0.02086977],
       [ 0.61681656,  1.44215576,  1.7281482 ],
       [ 0.96761142,  0.6475979 ,  0.57524988]])

In [79]:

 

np.square(arr)#函數求平方

Out[79]:

array([[  1.69753863e+00,   2.62708531e+00,   4.35547217e-04],
       [  3.80462668e-01,   2.07981323e+00,   2.98649619e+00],
       [  9.36271853e-01,   4.19383043e-01,   3.30912420e-01]])

In [82]:

 

arr1 = np.random.randint(1, 10, size=(5))
arr1

Out[82]:

array([5, 2, 9, 4, 1])

In [83]:

 

arr2 = np.random.randint(1, 10, size=(5))
arr2

Out[83]:

array([7, 6, 9, 1, 3])

In [84]:

 

np.add(arr1, arr2)

Out[84]:

array([12,  8, 18,  5,  4])

In [85]:

 

np.minimum(arr1, arr2)#minimum函數用於計算元素最小值;

Out[85]:

array([5, 2, 9, 1, 1])

In [86]:

 

arr = np.random.normal(2,4,size=(6,))
arr

Out[86]:

array([ 4.03156633,  2.24471147, -1.05295999,  3.17361538,  9.45900887,
        2.48014303])

In [87]:

 

np.modf(arr)#modf()函數可返回兩個數組,最小值和整數部分;

Out[87]:

(array([ 0.03156633,  0.24471147, -0.05295999,  0.17361538,  0.45900887,
         0.48014303]), array([ 4.,  2., -1.,  3.,  9.,  2.]))

 


 
# 八.條件邏輯運算

In [88]:

 

arr1 = np.array([1, 2, 3, 4])
arr2 = np.array([5, 6, 7, 8])
cond = np.array([True, False, False, True])

In [89]:

 

result = [(x if c else y) for x, y, c in zip(arr1, arr2, cond)]
result

Out[89]:

[1, 6, 7, 4]

In [91]:

 

result = np.where(cond, arr1, arr2)
result

Out[91]:

array([1, 6, 7, 4])

In [93]:

 

arr = np.random.randn(4, 4)
arr

Out[93]:

array([[ 0.99483299, -0.42559031,  0.60728194, -0.28477079],
       [-0.47341549, -1.03284446, -1.24692688, -0.7168212 ],
       [-0.2463296 ,  0.9006737 , -0.8362647 ,  0.28860023],
       [ 0.24025673, -1.14644973,  0.84133157, -0.00742223]])

In [94]:

 

new_arr = np.where(arr > 0, 1, -1)
new_arr

Out[94]:

array([[ 1, -1,  1, -1],
       [-1, -1, -1, -1],
       [-1,  1, -1,  1],
       [ 1, -1,  1, -1]])

In [115]:

 

arr = np.random.randint(1, 300, size=(3,3))
arr

Out[115]:

array([[177, 177,  99],
       [238, 233, 131],
       [125, 288,   5]])

In [116]:

 

new_arr = np.where(arr > 200, 3,
                   np.where(arr > 100, 2, 1))
new_arr

Out[116]:

array([[2, 2, 1],
       [3, 3, 2],
       [2, 3, 1]])

 


 
# 九.統計運算

In [121]:

 

arr = np.random.randn(4, 4)
arr

Out[121]:

array([[-0.2460958 , -3.56262609,  2.28878812, -0.66155659],
       [-0.32224876, -0.62264566,  0.0759868 , -0.50014849],
       [ 0.38841614,  0.2260369 , -0.61771424,  0.00538855],
       [-0.29865896,  0.51231692,  0.48119231,  0.06256321]])

In [122]:

 

arr.sum()#求和

Out[122]:

-2.791005624657537

In [123]:

 

arr.mean()#算術平均數

Out[123]:

-0.17443785154109606

In [124]:

 

arr.std()#std()函數可計算標準差,var()函數可計算方差;

Out[124]:

1.1141240674492316

In [125]:

 

arr

Out[125]:

array([[-0.2460958 , -3.56262609,  2.28878812, -0.66155659],
       [-0.32224876, -0.62264566,  0.0759868 , -0.50014849],
       [ 0.38841614,  0.2260369 , -0.61771424,  0.00538855],
       [-0.29865896,  0.51231692,  0.48119231,  0.06256321]])

In [126]:

 

arr.mean()
#指定軸向求算術平均值
#axis=1,1代表行
#axis=0,0代表列

Out[126]:

array([ -5.45372587e-01,  -3.42264027e-01,   5.31836566e-04,
         1.89353371e-01])

In [127]:

 

arr.sum(0)#求和

Out[127]:

array([-0.47858738, -3.44691793,  2.228253  , -1.09375332])

In [128]:

 

arr = np.arange(9).reshape(3,3)
arr

Out[128]:

array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

In [129]:

 

arr.cumsum(0)#所有元素的累計和

Out[129]:

array([[ 0,  1,  2],
       [ 3,  5,  7],
       [ 9, 12, 15]], dtype=int32)

In [130]:

 

arr.cumprod(1)#所有元素的累計積

Out[130]:

array([[  0,   0,   0],
       [  3,  12,  60],
       [  6,  42, 336]], dtype=int32)

 


 
# 十.布爾型數組運算

In [132]:

 

arr = np.random.randn(20)
arr

Out[132]:

array([ 0.64854453, -1.02444099,  1.18506546,  1.0588872 , -1.67297679,
        1.11245385, -1.47720606,  0.67531455,  0.10707936,  1.60181681,
       -0.09663766,  0.13821122,  2.08949018, -0.85208144, -1.01504574,
       -1.01749498,  0.42782922, -0.83512655,  0.20623175, -0.23411408])

In [133]:

 

(arr > 0).sum()

Out[133]:

11

In [134]:

 

arr = np.array([True, False, False, True])
arr

Out[134]:

array([ True, False, False,  True], dtype=bool)

In [135]:

 

arr.any()#any()函數用於測試數組中是否存在一個或多個True

Out[135]:

True

In [136]:

 

arr.all()#all()函數用於測試數組中是否所有值爲True

Out[136]:

False

 

# 十一.排序

In [137]:

 

arr = np.random.randn(10)
arr

Out[137]:

array([-0.06763165,  0.70670621, -2.28090762,  0.61654106,  0.35562341,
        0.57962632,  0.09817634,  1.52590085,  0.24640778, -0.69223728])

In [139]:

 

arr.sort()#通過sort()函數排序
arr

Out[139]:

array([-2.28090762, -0.69223728, -0.06763165,  0.09817634,  0.24640778,
        0.35562341,  0.57962632,  0.61654106,  0.70670621,  1.52590085])

In [140]:

 

arr = np.random.randn(5,3)
arr

Out[140]:

array([[ 0.76464658,  1.03958729,  0.83151511],
       [ 1.63188956, -0.62708685,  0.05175314],
       [ 0.85665906, -0.24305887,  1.30020042],
       [ 2.00108815, -1.49244044, -0.06771401],
       [ 0.26482398, -1.42061605, -1.0372988 ]])

In [141]:

 

#對於多維數組可以指定軸方向排序
arr.sort(1)
arr

Out[141]:

array([[ 0.76464658,  0.83151511,  1.03958729],
       [-0.62708685,  0.05175314,  1.63188956],
       [-0.24305887,  0.85665906,  1.30020042],
       [-1.49244044, -0.06771401,  2.00108815],
       [-1.42061605, -1.0372988 ,  0.26482398]])

In [142]:

 

fruits = np.array(['apple', 'banana', 'pear', 'banana', 'pear', 'apple', 'pear'])
fruits

Out[142]:

array(['apple', 'banana', 'pear', 'banana', 'pear', 'apple', 'pear'],
      dtype='<U6')

In [144]:

 

np.unique(fruits)
#唯一值運算

Out[144]:

array(['apple', 'banana', 'pear'],
      dtype='<U6')

In [145]:

 

arr = np.array([2, 3, 3, 2, 8, 1])
arr

Out[145]:

array([2, 3, 3, 2, 8, 1])

In [146]:

 

np.unique(arr)

Out[146]:

array([1, 2, 3, 8])

In [147]:

 

arr = np.array([2, 3, 5, 7])
arr

Out[147]:

array([2, 3, 5, 7])

In [148]:

 

np.in1d(arr, [2,7])#np.inld()函數用於測試機幾個數組是否包含相同的值;

Out[148]:

array([ True, False, False,  True], dtype=bool)

 


 
# 十二.數組的存取;

In [ ]:

 


 
arr = np.arange(12).reshape(4,3)
arr

In [152]:

 

np.savetxt('ch2ex1.csv', arr, fmt='%d',delimiter=',')#np.savetxt()對數據進行存儲

In [153]:

 

!type ch2ex1.csv
0,1,2
3,4,5
6,7,8
9,10,11

In [155]:

 

arr = np.loadtxt('ch2ex1.csv', delimiter=',')#np.loadtxt對數據進行讀取,並且加載到數組中;
arr

Out[155]:

array([[  0.,   1.,   2.],
       [  3.,   4.,   5.],
       [  6.,   7.,   8.],
       [  9.,  10.,  11.]])

 


 
# 十三.線性代數;

In [156]:

 

arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr1

Out[156]:

array([[1, 2, 3],
       [4, 5, 6]])

In [157]:

 

arr2 = np.arange(9).reshape(3,3)
arr2

Out[157]:

array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

In [159]:

 

np.dot(arr1,arr2)#np.dot()矩陣乘法的dot函數;

Out[159]:

array([[24, 30, 36],
       [51, 66, 81]])

In [160]:

 

from numpy.linalg import det

In [161]:

 

arr = np.array([[1, 2], [3, 4]])
arr

Out[161]:

array([[1, 2],
       [3, 4]])

In [162]:

 

det(arr)

Out[162]:

-2.0000000000000004

 

# 圖像處理

In [164]:

 

from PIL import Image
import numpy as np

In [165]:

 

im = np.array(Image.open('C:/Users/LP/Desktop/2.76.jpeg'))
print(im.shape,im.dtype)
(350, 583, 3) uint8

In [166]:

 

im

Out[166]:

array([[[226, 226, 226],
        [226, 226, 226],
        [226, 226, 226],
        ..., 
        [198, 198, 198],
        [197, 197, 197],
        [196, 196, 196]],

       [[226, 226, 226],
        [226, 226, 226],
        [226, 226, 226],
        ..., 
        [198, 198, 198],
        [197, 197, 197],
        [196, 196, 196]],

       [[226, 226, 226],
        [226, 226, 226],
        [226, 226, 226],
        ..., 
        [198, 198, 198],
        [197, 197, 197],
        [195, 195, 195]],

       ..., 
       [[210, 210, 210],
        [211, 211, 211],
        [211, 211, 211],
        ..., 
        [122, 122, 122],
        [124, 124, 124],
        [125, 125, 125]],

       [[211, 211, 211],
        [211, 211, 211],
        [211, 211, 211],
        ..., 
        [120, 120, 120],
        [122, 122, 122],
        [124, 124, 124]],

       [[211, 211, 211],
        [211, 211, 211],
        [212, 212, 212],
        ..., 
        [119, 119, 119],
        [121, 121, 121],
        [123, 123, 123]]], dtype=uint8)

In [170]:

 

b = [255, 255, 255] - im    #數組運算
new_im = Image.fromarray(b.astype('uint8'))  
new_im.save('C:/Users/LP/Desktop/2.79.jpeg')  #保存爲新圖像

In [172]:

 

b

Out[172]:

array([[[ 29,  29,  29],
        [ 29,  29,  29],
        [ 29,  29,  29],
        ..., 
        [ 57,  57,  57],
        [ 58,  58,  58],
        [ 59,  59,  59]],

       [[ 29,  29,  29],
        [ 29,  29,  29],
        [ 29,  29,  29],
        ..., 
        [ 57,  57,  57],
        [ 58,  58,  58],
        [ 59,  59,  59]],

       [[ 29,  29,  29],
        [ 29,  29,  29],
        [ 29,  29,  29],
        ..., 
        [ 57,  57,  57],
        [ 58,  58,  58],
        [ 60,  60,  60]],

       ..., 
       [[ 45,  45,  45],
        [ 44,  44,  44],
        [ 44,  44,  44],
        ..., 
        [133, 133, 133],
        [131, 131, 131],
        [130, 130, 130]],

       [[ 44,  44,  44],
        [ 44,  44,  44],
        [ 44,  44,  44],
        ..., 
        [135, 135, 135],
        [133, 133, 133],
        [131, 131, 131]],

       [[ 44,  44,  44],
        [ 44,  44,  44],
        [ 43,  43,  43],
        ..., 
        [136, 136, 136],
        [134, 134, 134],
        [132, 132, 132]]])

In [ ]:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章