我有一个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
。我怎样才能做到这一点?谢谢!
答案 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]]])
权力并不是那样的。根据内置文档,您可以
np.power(a, 3)
或np.power(a, b)
,其中b
是一个与a
形状相同的数组,或将一个数组提升到多个幂,如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)