ValueError:操作数无法与形状一起广播

时间:2014-07-08 15:43:01

标签: python numpy

我有一个Numpy数组,其形状为(6,2),

a = array([[1, 2, 3, 3, 2, 1],
           [4, 5, 6, 7, 8, 9]])

我想使用将数组的每个元素提升为两个不同的幂(-6,-8) np.power(a, [-6,-8])但这会引发ValueError: operands could not be broadcast together with shapes。我怎样才能做到这一点?谢谢!

1 个答案:

答案 0 :(得分:2)

你想要得到这个:

>>> a = np.array([[1, 2, 3, 3, 2, 1], [4, 5, 6, 7, 8, 9]], dtype=float)
>>> np.array([np.power(a, -6), np.power(a, -8)])
array([[[  1.00000000e+00,   1.56250000e-02,   1.37174211e-03,
           1.37174211e-03,   1.56250000e-02,   1.00000000e+00],
        [  2.44140625e-04,   6.40000000e-05,   2.14334705e-05,
           8.49985975e-06,   3.81469727e-06,   1.88167642e-06]],
       [[  1.00000000e+00,   3.90625000e-03,   1.52415790e-04,
           1.52415790e-04,   3.90625000e-03,   1.00000000e+00],
        [  1.52587891e-05,   2.56000000e-06,   5.95374181e-07,
           1.73466526e-07,   5.96046448e-08,   2.32305731e-08]]])

权力并不是那样的。根据内置文档,您可以

  1. 将整个阵列提升为单一功率,如np.power(a, 3)
  2. 使用不同的权力提升一个数组,如np.power(a, b),其中b是一个与a形状相同的数组,或
  3. 将一个数组提升到多个幂,如np.power(a, b),其中b有"至少" a的形状,具有包含不同功率的额外尺寸(无论如何,我理解)。因此,对于您的情况,以下内容也会产生相同的结果:

    >>> b = np.array([-6 * np.ones(a.shape), -8 * np.ones(a.shape)])
    >>> b
    array([[[-6., -6., -6., -6., -6., -6.],
            [-6., -6., -6., -6., -6., -6.]],    
           [[-8., -8., -8., -8., -8., -8.],
            [-8., -8., -8., -8., -8., -8.]]])
    >>> np.power(a, b)