我使用这样的numpy.genfromtxt
生成数据:
ConvertToDate = lambda s:datetime.strptime(s,"%d/%m/%Y")
data= numpy.genfromtxt(open("PSECSkew.csv", "rb"),
delimiter=',',
dtype=[('CalibrationDate', datetime),('Expiry', datetime), ('B0', float), ('B1', float), ('B2', float), ('ATMAdjustment', float)],
converters={0: ConvertToDate, 1: ConvertToDate})
我现在想提取最后 4 列(每行但在一个循环中,所以让我们只考虑一行)来分隔变量。所以我这样做:
B0 = data[0][2]
B1 = data[0][3]
B2 = data[0][4]
ATM = data[0][5]
但是,如果我能做到这一点(例如,我可以像普通的 2D ndarray 一样),我更喜欢它:
B0, B1, B2, ATM = data[0][2:]
但这给了我一个"无效索引"错误。有没有办法很好地做到这一点,或者我应该坚持 4 行方法?
作为np.genfromtxt
的输出,你有一个结构化数组,即一个一维数组,其中每一行作为不同的字段。
如果要访问某些字段,只需按名称访问它们:
data["B0"], data["B1"], ...
您还可以对它们进行分组:
data[["B0", "B1]]
这为您提供了一个"新"结构化数组,其中只有您想要的字段("new"两边加上引号,因为数据没有被复制,它仍然与初始数组相同)。
如果你想要一些特定的"行",只需做:
data[["B0","B1"]][0]
输出第一行。切片和花哨的索引也可以。
因此,对于您的示例:
B0, B1, B2, ATM = data[["B0","B1","B2","ATMAdjustment"]][0]
如果您只想逐行访问这些字段,我建议先存储所需的字段的整个数组,然后迭代:
filtered_data = data[["B0","B1","B2","ATMAdjustment"]]
for row in filtered_data:
(B0, B1, B2, ATM) = row
do_something
甚至:
for (B0, B1, B2, ATM) in filtered_data:
do_something