Python 用一维数组乘以numpy-ndarray
所以我可以在这个论坛上看到很多问题,问如何在给定的轴上用1d N乘以numpy N。大多数答案建议使用np.newaxis来满足广播要求。这里我有一个更具体的问题,我想在轴2上乘法,例如:Python 用一维数组乘以numpy-ndarray,python,numpy,array-broadcasting,Python,Numpy,Array Broadcasting,所以我可以在这个论坛上看到很多问题,问如何在给定的轴上用1d N乘以numpy N。大多数答案建议使用np.newaxis来满足广播要求。这里我有一个更具体的问题,我想在轴2上乘法,例如: >>> import numpy as np >>> x = np.arange(27).reshape((3,3,3)) >>> y = np.arange(3) >>> z = x*y[:,np.newaxis,np.newaxis]
>>> import numpy as np
>>> x = np.arange(27).reshape((3,3,3))
>>> y = np.arange(3)
>>> z = x*y[:,np.newaxis,np.newaxis]
>>> x
array([[[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8]],
[[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17]],
[[18, 19, 20],
[21, 22, 23],
[24, 25, 26]]])
>>> y
array([0, 1, 2])
>>> z
array([[[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0]],
[[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17]],
[[36, 38, 40],
[42, 44, 46],
[48, 50, 52]]])
这就是我想要的乘法。
然而,在我的例子中,我得到的沿轴0和1的尺寸与沿轴2的尺寸不匹配,例如,当我尝试为我的阵列实现上述操作时,我得到以下结果:
>>> x = np.arange(144).reshape(8,6,3)
>>> z = x*y[:,np.newaxis,np.newaxis]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: operands could not be broadcast together with shapes (8,6,3) (3,1,1)
我现在没有在正确的轴上进行乘法
有什么办法解决这个问题吗?您好,我已经设法把它做成一个长的格式,轴与您在第一个示例中所做的类似,但不确定这是否正确
将numpy导入为np
测试=np.arange(144)。重塑(8,6,3)
test2=np.arange(3)
数组([test[i]*test2[i]表示范围内的i(len(test.shape)))
>>>数组([[0,0,0],
[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0]],
[[ 18, 19, 20],
[ 21, 22, 23],
[ 24, 25, 26],
[ 27, 28, 29],
[ 30, 31, 32],
[ 33, 34, 35]],
[[ 72, 74, 76],
[ 78, 80, 82],
[ 84, 86, 88],
[ 90, 92, 94],
[ 96, 98, 100],
[102, 104, 106]]])
您希望它如何将3个y
值与大小为8的维度相乘?如果查看数组x,其沿轴2的大小为3,与y的大小匹配。应该可以将数组相乘…您的最后一个表达式(与x*y
相同)使用匹配的最后一个轴。但显然那不是你想要的。您只想将x
的一部分乘以y
,x[:3]
。这样就得到了一个(3,6,3)数组,它在第一维度上匹配。这个选择在你的问题中并不明显。这是正确的,谢谢!良好的一线解决方案这有效地将test
减少为(3,6,3)数组,test[:3]
>>> z = x*y[np.newaxis,np.newaxis,:]