我打算在不同的n值上绘制y ^ n vs x。这是我的示例代码:
import numpy as np
x=np.range(1,5)
y=np.range(2,9,2)
exponent=np.linspace(1,8,50)
z=y**exponent
有了这个,我收到了以下错误:
ValueError: operands could not be broadcast together with shapes (4) (5)
我的想法是,对于n的每个值,我将得到一个数组,其中该数组包含现在被提升为n的y的新值。例如:
y1= [] #an array where y**1
y2= [] #an array where y**1.5
y3= [] #an array where y**2
等。我不知道如何为y ** n获得50个数组,是否有更简单的方法呢?谢谢。
答案 0 :(得分:0)
您可以使用"广播" (在文档中解释here)并创建一个新轴:
z = y**exponent[:,np.newaxis]
换句话说,而不是
>>> y = np.arange(2,9,2)
>>> exponent = np.linspace(1, 8, 50)
>>> z = y**exponent
Traceback (most recent call last):
File "<ipython-input-40-2fe7ff9626ed>", line 1, in <module>
z = y**exponent
ValueError: operands could not be broadcast together with shapes (4,) (50,)
您可以使用array[:,np.newaxis]
(或array[:,None]
,同样的事情,但newaxis
更明确地表达您的意图)为数组提供额外的大小为1的维度:
>>> exponent.shape
(50,)
>>> exponent[:,np.newaxis].shape
(50, 1)
等等
>>> z = y**exponent[:,np.newaxis]
>>> z.shape
(50, 4)
>>> z[0]
array([ 2., 4., 6., 8.])
>>> z[1]
array([ 2.20817903, 4.87605462, 7.75025005, 10.76720154])
>>> z[0]**exponent[1]
array([ 2.20817903, 4.87605462, 7.75025005, 10.76720154])