簡體   English   中英

特殊向量和元素乘法

[英]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.

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