簡體   English   中英

使用 3d 數組進行 numpy 廣播

[英]numpy broadcasting with 3d arrays

是否可以應用 numpy 廣播(使用一維數組),

x=np.arange(3)[:,np.newaxis]
y=np.arange(3)
x+y=
array([[0, 1, 2],
       [1, 2, 3],
       [2, 3, 4]])

到類似於下面的 3d 矩陣,這樣 a[i] 中的每個元素都被視為一個一維向量,就像上面的例子一樣?

a=np.zeros((2,2,2))
a[0]=1
b=a
result=a+b

導致

result[0,0]=array([[2, 2],
                   [2, 2]])

result[0,1]=array([[1, 1],
                   [1, 1]])

result[1,0]=array([[1, 1],
                   [1, 1]])

result[1,1]=array([[0, 0],
                   [0, 0]])

您可以以與一維數組相同的方式執行此操作,即在軸 0 和軸 1 之間的ab插入一個新軸:

a + b[:,None]    # or a[:,None] + b

(a + b[:,None])[0,0]
#array([[ 2.,  2.],
#       [ 2.,  2.]])

(a + b[:,None])[0,1]
#array([[ 1.,  1.],
#       [ 1.,  1.]])

(a + b[:,None])[1,0]
#array([[ 1.,  1.],
#       [ 1.,  1.]])

(a + b[:,None])[1,1]
#array([[ 0.,  0.],
#       [ 0.,  0.]])

由於ab的形狀相同,比如(2,2,2)a+b確實可以工作。 廣播的工作方式是它以相反的順序匹配操作數的維度,從最后一個維度開始(例如,在二維情況下考慮行之前的列)。 如果維度匹配,則考慮下一個維度。

如果維度不匹配,並且如果維度之一為1 ,則重復該操作數的維度以匹配另一個操作數(例如,如果a.shape = (2,1,2)b.shape = (2,2,2)然后重復a的第一個維度的值以形成形狀(2,2,2) )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM