将数组提升到不同的值

时间:2014-11-02 15:55:48

标签: python

我打算在不同的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个数组,是否有更简单的方法呢?谢谢。

1 个答案:

答案 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])