使用genfromtxt创建空列的numpy数组

时间:2013-02-04 16:28:57

标签: python arrays numpy concatenation genfromtxt

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

有没有办法在不复制数组的情况下执行此操作,可能是强制genfromtxt创建一个我可以附加派生值的空列?

2 个答案:

答案 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]])