特殊向量和元素乘法

时间:2014-02-06 14:05:49

标签: python arrays numpy

我有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。

1 个答案:

答案 0 :(得分:3)

如果您从:

开头
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]]])