[英]Special Vector and Element-wise Multiplication
我有2個陣列。 “A”是其中一個具有任意長度(讓我們假定一個開始的1000個條目),其中每個點包含一個n維向量,其中每個條目代表一個標量。 “B”是另一個,其中n個條目各自包含三維向量。 如何進行標量乘法,結果是一個數組“C”,其中每個條目是每個n個標量與每個n維三維向量的標量乘法?
作為4-D中的一個例子:
a=[[1,2,3,4],[5,6,7,8],....]
b=[[1,0,0],[0,1,0],[0,0,1],[1,1,1]]
結果
c=[[1*[1,0,0],2*[0,1,0],3*[0,0,1],4*[1,1,1]] , [5*[1,0,0],...],...]
實現應該是numpy而不是大的for循環,因為預計將有超過1000個條目。 在我們的案例中, n預計為7。
如果您從:
a = np.array([[1,2,3,4],[5,6,7,8]])
b = np.array([[1,0,0],[0,1,0],[0,0,1],[1,1,1]])
然后我們可以為a
添加一個額外的軸,並沿着它重復數組給我們...
>>> a[:,:,None].repeat(3, axis=2)
array([[[1, 1, 1],
[2, 2, 2],
[3, 3, 3],
[4, 4, 4]],
[[5, 5, 5],
[6, 6, 6],
[7, 7, 7],
[8, 8, 8]]])
現在,正如@Jaime所說,在操作時沒有必要使用repeat
,因為NumPy的廣播會照顧它:
>>> a[:,:,None] * b
array([[[1, 0, 0],
[0, 2, 0],
[0, 0, 3],
[4, 4, 4]],
[[5, 0, 0],
[0, 6, 0],
[0, 0, 7],
[8, 8, 8]]])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.