日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

numpy.newaxis详解

發布時間:2025/4/5 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 numpy.newaxis详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

numpy.newaxis

numpy.newaxis的工作方式及適用場合

簡單地說,newaxis的作用是給現有的數組增加一個維度。例如:

  • 1維數組將變為2維數組
  • 2維數組將變為3維數組
  • 3維數組將變為4維數組
  • 4維數組將變為5維數組
    等等。

我們在這里利用圖示的方法解釋一維數組通過添加新維度變為二維數組的過程:

  • 一維數組在列方向(axis=0)進行廣播變為二維數組:

  • 一維數組在行方向(axis=1)進行廣播變為二維數組:


當然,二維數組沿深度方向(axis=3)進行廣播可以變為三維數組:


適用場合1:

當你想要將一個一維數組像上面圖中所示一樣,在行方向或列方向進行廣播變為二維數組,你可能需要用到np.newaxis。
示例代碼:

# 創建一維數組 import numpy as np arr = np.arange(4) print('arr數組的維度為:{}'.format(arr.shape)) # 我們沿著第一維添加軸使其成為行向量 row_vec = arr[np.newaxis, :] # 也可寫為arr[None, :] print('row_vec數組的維度為:{}'.format(row_vec.shape)) # 我們沿著第二維添加軸使其成為列向量 col_vec = arr[:, np.newaxis] # 也可寫為arr[:, None] print('col_vec數組的維度為:{}'.format(col_vec.shape)) arr數組的維度為:(4,) row_vec數組的維度為:(1, 4) col_vec數組的維度為:(4, 1)

適用場合2:

當你需要在一些計算過程中采用numpy的廣播機制(例如求兩個維度不同的數組之和的時候),你可能需要用到np.newaxis。
示例代碼:
例如你想求以下兩數組之和

x1 = np.array([1, 2, 3, 4, 5]) x2 = np.array([5, 4, 3])

如果你將兩數組直接相加,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將數組擴充到更高維度。對于高階數組(例如:張量),有時需要這樣的操作。
示例代碼:

arr = np.arange(5*5).reshape(5,5) print('arr數組的維度為:{}'.format(arr.shape)) # 將2維數組變為5維數組 arr_5D = arr[np.newaxis, ..., np.newaxis, np.newaxis] # 也可寫為arr[None, ..., None, None] print('arr_5D數組的維度為:{}'.format(arr_5D.shape)) arr數組的維度為:(5, 5) arr_5D數組的維度為:(1, 5, 5, 1, 1)
  • np.newaxis和np.reshape的不同之處
    newaxis也被稱為假索引,它允許臨時將一個軸添加到多維數組中。
    np.newaxis使用切片操作符來創建新數組,然而np.reshape是根據所需形狀對數組進行形狀變換(變換前后的維度必須互相匹配)。
    示例代碼:
A = np.ones((3,4,5,6)) B = np.ones((4,6)) print('A + B[:, np.newaxis, :]的維度為:{}'.format((A + B[:, np.newaxis, :]).shape)) A + B[:, np.newaxis, :]的維度為:(3, 4, 5, 6)

上例中,我們在數組B的第一個軸和第二個軸之間臨時添加一個軸(這里使用np.newaxis填充缺失的軸,只有這樣子數組才可以進行廣播)。


小貼士: 你也可以使用None代替np.newaxis,事實上,他們是相同的對象。

print('np.newaxis和None一樣嗎:{}'.format(np.newaxis is None)) np.newaxis和None一樣嗎:True

github鏈接
https://github.com/wzy6642/numpy-translate

總結

以上是生活随笔為你收集整理的numpy.newaxis详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。