将标量与Numpy数组进行比较

时间:2016-07-21 15:33:50

标签: python arrays variables numpy astropy

我要做的是根据Python中的分段函数创建一个表。例如,假设我写了这段代码:

T.shape

这可以按预期工作,它会打印一个表格,其中import numpy as np from astropy.table import Table, Column from astropy.io import ascii x = np.array([1, 2, 3, 4, 5]) y = x * 2 data = Table([x, y], names = ['x', 'y']) ascii.write(data, "xytable.dat") xytable = ascii.read("xytable.dat") print xytable 值为1到5,x值为2,4,6,8,10。

但是,如果我希望y仅在y为3或更低时才x * 2,而xy,那该怎么办?

如果我添加:

x + 2

它说:

  

具有多个元素的数组的真值是不明确的。使用a.any()或a.all()

如何编写表格以使其作为分段函数运行?如何将标量与Numpy数组进行比较?

2 个答案:

答案 0 :(得分:3)

您可以使用numpy.where()

In [196]: y = np.where(x > 3, x + 2, y)

In [197]: y
Out[197]: array([2, 4, 6, 6, 7])

上面的代码以完全矢量化的方式完成工作。与使用列表推导和类型转换相比,这种方法通常更有效(并且可以说更优雅)。

答案 1 :(得分:1)

开始不使用numpy(或者你可以,我不知道numpy),只是使用常规python列表。

x = [ 1, 2, 3, 4, 5 ]
y = [ i * 2 if i < 3 else i + 2 for i in x ]
print y

输出:

[2, 4, 5, 6, 7]

然后你可以把它变成一个numpy数组:

x = np.array(x)
y = np.array(y)