我正在使用 导入数据numpy.genfromtxt
,并且我想添加一个从数据集中的一些值派生的值字段。由于这是一个结构化数组,因此向数组添加新列的最简单、最有效的方法似乎是使用numpy.lib.recfunctions.append_fields()
. 我在这里找到了这个库的一个很好的描述。
有没有办法在不复制数组的情况下做到这一点,也许是通过强制genfromtxt
创建一个我可以附加派生值的空列?
我正在使用 导入数据numpy.genfromtxt
,并且我想添加一个从数据集中的一些值派生的值字段。由于这是一个结构化数组,因此向数组添加新列的最简单、最有效的方法似乎是使用numpy.lib.recfunctions.append_fields()
. 我在这里找到了这个库的一个很好的描述。
有没有办法在不复制数组的情况下做到这一点,也许是通过强制genfromtxt
创建一个我可以附加派生值的空列?
我试图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.]]
这是一个使用生成器向数据文件添加字段的简单示例,使用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]])