Py学习  »  Python

python-在具有相同“外部”大小的数组之间广播

Notso • 5 年前 • 1613 次点击  

在我看来,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,)的数组一起广播会很好地工作-那么,当它们是两个较大数组的“子数组”时,为什么不工作呢?

做我想做的事最‘蟒蛇’的方式是什么?具体地说,这是为了创建一个三维数组,其中每个二维子数组在整个过程中都有不同的值。显然,我可以用一个循环,但它看起来并不优雅。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38894
 
1613 次点击  
文章 [ 2 ]  |  最新文章 5 年前