2

我正在使用 导入数据numpy.genfromtxt,并且我想添加一个从数据集中的一些值派生的值字段。由于这是一个结构化数组,因此向数组添加新列的最简单、最有效的方法似乎是使用numpy.lib.recfunctions.append_fields(). 我在这里找到了这个库的一个很好的描述。

有没有办法在不复制数组的情况下做到这一点,也许是通过强制genfromtxt创建一个我可以附加派生值的空列?

4

2 回答 2

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.]]
于 2013-05-09T20:47:14.150 回答
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]])
于 2014-04-08T22:11:57.337 回答