iT邦幫忙

2022 iThome 鐵人賽

DAY 5
0
自我挑戰組

高中生也可以!利用強化學習讓機器人動起來!系列 第 5

D5:資料科學入門!numpy基礎(1/2)

  • 分享至 

  • xImage
  •  

我們花了三天介紹python,對於這個語言應該有一些基礎的認識了,接下來要踏入人工智慧前的一些資料科學,資料科學簡單來說就是分析資料、資料清洗、特徵工程等很多領域結合而成的。python中也有很多料科學的套件,其中numpy為科學套件的基礎,它可以讓使用者很容易建立矩陣跟向量,同時numpy是使用c語言編寫而成的,所以可以相當快速地進行運算。接下來兩天會講介紹numpy較基礎跟實用的語法。

首先要從終端機或者anaconda prompt先安裝函式庫pip install numpy並且匯入到主程式import numpy as np

建立numpy陣列

首先要建立一個陣列,陣列(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


上一篇
D4:python入門(3/3)
下一篇
D6:資料科學入門!numpy基礎(2/2)
系列文
高中生也可以!利用強化學習讓機器人動起來!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言