我正在使用numpy.genfromtxt
导入数据,我想添加一个从数据集中的某些值派生的值字段。由于这是一个结构化数组,因此使用numpy.lib.recfunctions.append_fields()
似乎是向数组添加新列的最简单有效的方法。我找到了对此库HERE的良好描述。
有没有办法在不复制数组的情况下执行此操作,可能是强制genfromtxt
创建一个我可以附加派生值的空列?
答案 0 :(得分:1)
我试图让genfromtxt
读到这个:
11,12,13,14,15
21,22,
31,32,33,34,35
41,42,43,,45
使用:
import numpy as np
print np.genfromtxt('tmp.txt',delimiter=',',filling_values='0')
但它不起作用。我不得不更改输入添加逗号来表示空列:
11,12,13,14,15
21,22,,,
31,32,33,34,35
41,42,43,,45
然后它起作用了,返回:
[[ 11. 12. 13. 14. 15.]
[ 21. 22. 0. 0. 0.]
[ 31. 32. 33. 34. 35.]
[ 41. 42. 43. 0. 45.]]
答案 1 :(得分:1)
以下是使用生成器使用 genfromtxt
将字段添加到数据文件的简单示例我们的示例数据文件将是 data.txt ,内容为:
1,11,1.1
2,22,2.2
3,33,3.3
所以
In [19]: np.genfromtxt('data.txt',delimiter=',')
Out[19]:
array([[ 1. , 11. , 1.1],
[ 2. , 22. , 2.2],
[ 3. , 33. , 3.3]])
如果我们制作如下的发电机:
def genfield():
for line in open('data.txt'):
yield '0,' + line
在文件的每一行前加上逗号分隔的0,然后:
In [22]: np.genfromtxt(genfield(),delimiter=',')
Out[22]:
array([[ 0. , 1. , 11. , 1.1],
[ 0. , 2. , 22. , 2.2],
[ 0. , 3. , 33. , 3.3]])
你可以用以下理解做同样的事情:
In [26]: np.genfromtxt(('0,'+line for line in open('data.txt')),delimiter=',')
Out[26]:
array([[ 0. , 1. , 11. , 1.1],
[ 0. , 2. , 22. , 2.2],
[ 0. , 3. , 33. , 3.3]])