numpy.newaxis详解
numpy.newaxis
numpy.newaxis的工作方式及適用場合
簡單地說,newaxis的作用是給現有的數組增加一個維度。例如:
- 1維數組將變為2維數組
- 2維數組將變為3維數組
- 3維數組將變為4維數組
- 4維數組將變為5維數組
等等。
我們在這里利用圖示的方法解釋一維數組通過添加新維度變為二維數組的過程:
- 一維數組在列方向(axis=0)進行廣播變為二維數組:
- 一維數組在行方向(axis=1)進行廣播變為二維數組:
當然,二維數組沿深度方向(axis=3)進行廣播可以變為三維數組:
適用場合1:
當你想要將一個一維數組像上面圖中所示一樣,在行方向或列方向進行廣播變為二維數組,你可能需要用到np.newaxis。
示例代碼:
適用場合2:
當你需要在一些計算過程中采用numpy的廣播機制(例如求兩個維度不同的數組之和的時候),你可能需要用到np.newaxis。
示例代碼:
例如你想求以下兩數組之和
如果你將兩數組直接相加,Numpy將產生ValueError錯誤:
x1+x2 --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-3-dd01ff2e8cbd> in <module> ----> 1 x1+x2ValueError: operands could not be broadcast together with shapes (5,) (3,)在這種情況下,你可以使用np.newaxis對其中一個數組增加維度,這樣子numpy便可利用其廣播機制使兩個數組變為相同維度了。
x1_new = x1[:, np.newaxis] # 也可寫為x1[:, None] print('現在,x1_new的維度變為了:{}'.format(x1_new.shape)) print('x1_new的具體內容為:\n{}'.format(x1_new)) 現在,x1_new的維度變為了:(5, 1) x1_new的具體內容為: [[1][2][3][4][5]]此時,我們再進行數組相加的運算:
print('x1_new + x2 = \n{}'.format(x1_new + x2)) x1_new + x2 = [[ 6 5 4][ 7 6 5][ 8 7 6][ 9 8 7][10 9 8]]同樣的,你也可以選擇為數組x2添加軸:
x2_new = x2[:, np.newaxis] # 也可寫為x2[:, None] print('現在,x2_new的維度變為了:{}'.format(x2_new.shape)) print('x2_new的具體內容為:\n{}'.format(x2_new)) 現在,x2_new的維度變為了:(3, 1) x2_new的具體內容為: [[5][4][3]]此時,我們再進行數組相加的運算:
print('x1 + x2_new = \n{}'.format(x1 + x2_new)) x1 + x2_new = [[ 6 7 8 9 10][ 5 6 7 8 9][ 4 5 6 7 8]]注意: 通過觀察我們可以發現兩次計算結果相同(其中一個是另一個的轉置)。
適用場合3:
和場合1類似,但是你可以多次使用np.newaxis將數組擴充到更高維度。對于高階數組(例如:張量),有時需要這樣的操作。
示例代碼:
- np.newaxis和np.reshape的不同之處
newaxis也被稱為假索引,它允許臨時將一個軸添加到多維數組中。
np.newaxis使用切片操作符來創建新數組,然而np.reshape是根據所需形狀對數組進行形狀變換(變換前后的維度必須互相匹配)。
示例代碼:
上例中,我們在數組B的第一個軸和第二個軸之間臨時添加一個軸(這里使用np.newaxis填充缺失的軸,只有這樣子數組才可以進行廣播)。
小貼士: 你也可以使用None代替np.newaxis,事實上,他們是相同的對象。
print('np.newaxis和None一樣嗎:{}'.format(np.newaxis is None)) np.newaxis和None一樣嗎:Truegithub鏈接
https://github.com/wzy6642/numpy-translate
總結
以上是生活随笔為你收集整理的numpy.newaxis详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: numpy.exp详解
- 下一篇: numpy.argmax详解