我們花了三天介紹python,對於這個語言應該有一些基礎的認識了,接下來要踏入人工智慧前的一些資料科學,資料科學簡單來說就是分析資料、資料清洗、特徵工程等很多領域結合而成的。python中也有很多料科學的套件,其中numpy為科學套件的基礎,它可以讓使用者很容易建立矩陣跟向量,同時numpy是使用c語言編寫而成的,所以可以相當快速地進行運算。接下來兩天會講介紹numpy較基礎跟實用的語法。
首先要從終端機或者anaconda prompt先安裝函式庫pip install numpy
並且匯入到主程式import numpy as np
首先要建立一個陣列,陣列(array)跟python的串列(list)差別在陣列可以進行大量高效率的運算
建立陣列的方法為a=np.array([1,2,3])
,這樣就建好一個簡單的陣列(因為是一維,也被稱為向量)了,建立陣列也有其他方法,例如:
a=np.array([1,2,3])
b=np.arange(0,10,1)
c=np.linspace(1,10,20)
d=np.ones((2,3))
e=np.zeros((2,3))
f=np.empty((2,3))
print(a)
print(b)
print(c)
print(d)
print(e)
print(f)
可以看到結果:
[1 2 3]
[0 1 2 3 4 5 6 7 8 9]
[ 1. 1.47368421 1.94736842 2.42105263 2.89473684 3.36842105
3.84210526 4.31578947 4.78947368 5.26315789 5.73684211 6.21052632
6.68421053 7.15789474 7.63157895 8.10526316 8.57894737 9.05263158
9.52631579 10. ]
[[1. 1. 1.]
[1. 1. 1.]]
[[0. 0. 0.]
[0. 0. 0.]]
[[0.00000000e+000 0.00000000e+000 2.14321575e-312]
[4.94065646e-324 0.00000000e+000 2.47032823e-323]]
np.arange是生成一連串元素的向量參數為(起始值,終止值,公差),很像生成式
np.linspace也差不多,不過參數為(起始值,終止值,元素個數),他會建立指定元素個數,公差會自己運算出來
np.zeros跟np.ones都是輸入形狀(shape)就可以生成指定形狀的全0或者全1陣列
np.empty是根據形狀產生隨機值的陣列,不過值都非常小,幾乎可以視作0
使用np.array()建立陣列也可指定資料型態
a=np.array([1,2,3],dtype=int) #也可用np.int、np.int32、np.int64效果一樣
a=np.array([1,2,3],dtype=float) #也可用np.float、np.float32、np.float64效果一樣
numpy也有append方法,不過使用上跟python的不太一樣,語法為np.array(array1,array2)
可用array=array.reshape(新形狀)來重塑陣列,例如把54陣列改成210陣列
a=np.ones((5,4))
print(a)
a=a.reshape((2,10))
print(a)
[[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. 1. 1. 1. 1. 1.]]
可以使用array.flatten()展開成一維陣列
a=np.array([[1,2,3],[4,5,6]])
a=a.flatten()
print(a) #[1 2 3 4 5 6]
陣列運算非常簡單,如下:
a=np.array([1,2,3])
b=np.array([4,5,6])
print(a+b) #[5 7 9]
print(a-b) #[-3 -3 -3]
print(a*b) #[ 4 10 18]
print(a/b) #[0.25 0.4 0.5 ]
a*=2
print(a) #[2 4 6]
就是使用基本四則符號可以了,運算方式為陣列元素跟另一個陣列相同位置的元素進行運算,而陣列也可以使用複合指定運算子。
我們可以使用array.shape來獲得這個陣列的形狀。
a=np.array([[1,2,3],[4,5,6]])
print(a)
print(a.shape)
[[1 2 3]
[4 5 6]]
(2, 3)
可以看到a陣列是形狀為2*3的陣列。
轉置矩陣會將行跟列進行交換,使用array.T就可以進行轉置。
a=np.array([[1,2,3],[4,5,6]])
print(a)
print(a.T)
[[1 2 3]
[4 5 6]]
[[1 4]
[2 5]
[3 6]]
可以使用numpy中的random來幫助生成隨機資料。
a=np.random.rand(2,5)
print(a)
b=np.random.random((2,5))
print(b)
c=np.random.randn(2,5)
print(c)
d=np.random.randint(1,10,(2,5))
print(d)
#rand
[[0.09037613 0.68923518 0.20600981 0.58922205 0.04218834]
[0.10169155 0.33084863 0.38825955 0.04666152 0.12743451]]
#random
[[0.2308432 0.56412475 0.0342022 0.0035756 0.83855544]
[0.44089665 0.4935332 0.16153141 0.31976637 0.46657174]]
#randn
[[ 0.93478698 1.28716153 -0.43287766 -1.16602183 0.72134879]
[ 1.69026533 0.50876559 0.3884557 -0.4534307 -1.87814995]]
#randint
[[3 1 6 5 7]
[6 4 4 2 3]]
其中rand跟randn都是設定各維度的長度(跟輸入shape不同)
rand會產生0~1之間的隨機浮點數陣列
randn會返回標準常態分佈下的隨機浮點數陣列
random參數是輸入shape,產生0~1隨機浮點數陣列
randint參數是輸入(起始值,結束值,shape),會產生起始值~結束值-1的隨機整數陣列
今天初步認識了numpy的基本功能,明天會再介紹利用Numpy進行矩陣運算,然後就可以介紹下一個模組了~
https://blog.happycoding.today/pythonbeginner-ep9/
https://numpy.org/doc/stable/user/quickstart.html