我要做的是根据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
,而x
为y
,那该怎么办?
如果我添加:
x + 2
它说:
具有多个元素的数组的真值是不明确的。使用a.any()或a.all()
如何编写表格以使其作为分段函数运行?如何将标量与Numpy数组进行比较?
答案 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)