1. 程式人生 > >深度學習理論基礎1-Numpy

深度學習理論基礎1-Numpy

夜夢,語文老師勒令我寫一篇《深度學習入門:基於Python的理論與實現》讀後感。我不敢懈怠,立即翻出我的膝上型電腦,開始寫作文。。。。

--------Numpy--------

簡介:

---->是一個Python第三方模組

---->處理陣列,矩陣,多維陣列十分便捷

---->底層用C語言實現,高效

--------Numpy陣列的加減乘除運算--------

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

這裡numpy的array()方法返回了一個numpy.ndarray型別的物件,其引數接受了一個列表。

numpy.ndarray型別支援的運算讓人滿足及歡樂。我將立即舉幾個例子,分享我的歡樂。

import numpy as np


arr_1 = np.array([1,2,3])
arr_2 = np.array([4,5,6])
jia = arr_1 + arr_2
jian = arr_1 - arr_2
cheng = arr_1 * arr_2
chu = arr_1 / arr_2
print(jia)
print(jian)
print(cheng)
print(chu)

np陣列的運算十分有趣。np陣列成員之間進行逐個運算,形成了新的陣列。這一切都沒有用到迴圈!np陣列相較於Python迴圈的優勢,在資料量大的時候愈加明顯。

--------Numpy陣列的其他功能--------

----  (這個標記會分割知識點)

array=np.array([[1,2,3],[4,5,6]]) #[[1 2 3] [4 5 6]]
print(array.shape) #輸出(2,3)
print(array.dtype) #int32

一隻多維陣列,np陣列的shape屬性顯示了這個np陣列的維度,dtype屬性顯示了這個np陣列的型別

----

array_10=array*10
print(array_10) #輸出[[10 20 30] [40 50 60]]

np陣列的廣播功能。一個np陣列乘以單個的10,np陣列內的每個元素都被乘以10.更詳細的原理在下圖。

其實10被自動補全成了與array相同的形狀,然後相乘。

----

接下來,我們看一下更高階的補全操作。

array_2 = np.array([2,4,10])
array_t = array * array_2
print(array_t) # 輸出[[ 2  8 30] [ 8 20 60]]

考慮下np.array([2,4,10])是怎麼被補全成array的形狀的呢?

如果你負責空間思維的那塊腦子不夠大,下面的圖會幫到你。

 ----

array = np.array([[1,2,3],[4,5,6]])
print(array[0]) # 輸出[1 2 3]
print(array[0][1]) # 輸出2

索引取值。

----

array_1 = array.flatten()
print(array_1) # 輸出[1 2 3 4 5 6]

把多維陣列扁平化。也就是降維打擊。把多維變成1維。

----

現在我們有array_1這個np陣列,我們來逗逗它。

array_index=array_1[np.array([2,3,4])]
print(array_index) # 輸出[3 4 5]

可以看到,一個np陣列的索引裡面依然可以放一個np陣列。會根據索引裡的np陣列作為索引生成新的np陣列。

----

array_tf=array_1[np.array([True,False,True,False,False,False])]
print(array_tf) # 輸出[1 3]

或者np陣列也可以接受一個成員為bool型別的np陣列(普通陣列型別的也可以接受)。結果也是一目瞭然的。

----

現在我們結合一下np陣列運算和np陣列的索引取值。

v = array_1 > 4
array_index=array_1[v]
print(array_index) #輸出[5 6]

先計算出一串bool成員的np陣列

然後把這個np陣列作為array_1的索引

這兩個組合操作讓我們得到這個陣列大於4的成員,是不是很方便呢?

----

--------結語--------

我們愉快的學完了需要的numpy陣列的有關知識。下面我們具備學習後面的最低限度基礎了。如果你希望使用numpy的更多強大功能,請向度娘求助。其他小夥伴讓我們手拉手進入下一個環節吧!!