首页 文章

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

提问于
浏览
0

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

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

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

1 回答

  • 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]]])
    

    权力并不是那样的 . 根据内置文档,你也可以

    • 将整个阵列提升为单个幂,如 np.power(a, 3) ,或

    • 用不同的幂提升一个数组,如 np.power(a, b) ,其中 b 是一个与 a 形状相同的数组,或者

    • 将一个数组提升到多个幂,如 np.power(a, b) ,其中b的形状为"at least",其中额外的维度包含不同的幂(无论如何,我理解它) . 因此,对于您的情况,以下内容也会产生相同的结果:

    >>> 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)
    

相关问题