在我看来,numpy似乎对广播阵列有一些非故意的行为。假设我们有两个数组
a = numpy.ones((2,2,3))
b = numpy.array([[1],[2]])
我希望能够将这些值相乘,输出为
>>> a*b
array([[[1., 1., 1.],
[1., 1., 1.]],
[[2., 2., 2.],
[2., 2., 2.]]])
但是我们得到
>>> a*b
array([[[1., 1., 1.],
[2., 2., 2.]],
[[1., 1., 1.],
[2., 2., 2.]]])
事实上,这个乘法只起作用,因为
第二
尺寸
a
和
外面的
尺寸
b
(2,在这种情况下)。如果有的话
a = numpy.ones((2,3,3))
,我得到以下错误:
>>> a*b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: operands could not be broadcast together with shapes (2,3,3) (2,1)
我发现这很奇怪的原因是,将形状(3,4)和(1,)的数组一起广播会很好地工作-那么,当它们是两个较大数组的“子数组”时,为什么不工作呢?
做我想做的事最‘蟒蛇’的方式是什么?具体地说,这是为了创建一个三维数组,其中每个二维子数组在整个过程中都有不同的值。显然,我可以用一个循环,但它看起来并不优雅。