我有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。
答案 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]]])