【Python資料科學】之Numpy

Bonstoppo發表於2019-04-29

1. Numpy介紹和執行速度的比較

Numpy是Python的一個庫,提供了Python高效能的陣列與矩陣運算處理的能力。本身是將Python的運算,放到了C語言上運算。

import numpy as np

def squares(values):
    result = []
    for v in values:
        result.append(v * v)
    return result

#use Python
to_square = range(10000)
%timeit squares(to_square)
#Answer: 2.57 ms ± 537 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)



#use Numpy
array_to_square = np.arange(0 , 10000)
%timeit array_to_square ** 2
#Answer: 16.7 µs ± 1.02 µs per loop (mean ± std. dev. of 7 runs, 100000 loops each)

1毫秒是1000微秒,很明顯的看出,在利用Numpy下的資料執行速度很快。

 

2.ndarray介紹

ndarray是Numpy中用來表示陣列用的。

注意最後的的地方,np.size(x2 , 0)代表輸出行 , 而np.size(x2 , 1)代表輸出列.

import Numpy as np

x = np.array([1 , 2 , 3 , 4 , 5])
print(type(x))#元素型別
print(x.ndim) #維度
print(x.shape) #形狀:(5列) , 先說列再說行,往後頂
print(x.size) #元素個數
print(x.itemsize) #儲存位元組個數
print(x.data)#檢視元素的儲存位置

y = np.array([[1 , 2 , 3 , 4 , 5] , [6 , 7 , 8 , 9 , 10] , [11 , 12 , 13 , 14 , 15]]) #形狀:(3行 , 5列)
print(y.ndim)
print(y.shape)
print(y.size)
print(y.itemsize)
print(y.data)


x2 = np.arange(0 , 12).reshape(4 , 3)
print(x2)
print(np.size(x2 , 0))#輸出行
print(np.size(x2 , 1))#輸出列

 

3.Boolean Selection 布林選擇器

布林選擇器是用來對資料進行切片處理的,包括了Slice,Reshape等操作。其實就是對於陣列的一個基本的操作。

print(x)
mask = x < 3
print(mask)
print(x[mask])
print(np.sum)
'''
[1 2 3 4 5]
[ True  True False False False]
[1 2]
<function sum at 0x000001D6C15DAB70>
'''

a1 = np.arange(9).reshape(3 , 3)
a2 = np.arange(9 , 0 , -1).reshape(3 , 3)
print(a1)
print(a2)
print(a1 < a2)

'''
[[0 1 2]
 [3 4 5]
 [6 7 8]]
[[9 8 7]
 [6 5 4]
 [3 2 1]]
[[ True  True  True]
 [ True  True False]
 [False False False]]
'''


y = np.arange(9).reshape(3 , 3)
reshaped = y.reshape(np.size(y))
reveled = y.ravel()
f = y.flatten()
print(y)
print(reshaped)#[0 1 2 3 4 5 6 7 8]
print(reveled)#[0 1 2 3 4 5 6 7 8]
print(f)#[0 1 2 3 4 5 6 7 8]

 

4.合併

ndarray陣列支援向量化的運算。

1.注意hstack傳入的資料是元組。

#Combination
a = np.arange(9).reshape(3 , 3)
b = (a + 1) * 10
b
'''
array([[10, 20, 30],
       [40, 50, 60],
       [70, 80, 90]])
'''

np.hstack((a , b))#水平合併
np.concatenate((a , b) , axis = 1)#水平合併
'''
array([[ 0,  1,  2, 10, 20, 30],
       [ 3,  4,  5, 40, 50, 60],
       [ 6,  7,  8, 70, 80, 90]])
'''

np.vstack((a , b))#豎直合併
np.concatenate((a , b) , axis = 0)#豎直合併
'''
Out[27]:
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [10, 20, 30],
       [40, 50, 60],
       [70, 80, 90]])
'''

 

相關文章