Python 使用genfromtxt创建具有空列的numpy数组

Python 使用genfromtxt创建具有空列的numpy数组,python,arrays,numpy,concatenation,genfromtxt,Python,Arrays,Numpy,Concatenation,Genfromtxt,我正在使用numpy.genfromtxt导入数据,我想添加一个从数据集中的某些值派生的值字段。由于这是一个结构化数组,向数组中添加新列的最简单、最有效的方法似乎是使用numpy.lib.recfunctions.append\u fields()。我发现这个图书馆有很好的描述 有没有一种方法可以在不复制数组的情况下执行此操作,可能是通过强制genfromtxt创建一个空列,我可以将派生值附加到该列?我试图让genfromtxt阅读以下内容: 11,12,13,14,15 21,22, 31,3

我正在使用
numpy.genfromtxt
导入数据,我想添加一个从数据集中的某些值派生的值字段。由于这是一个结构化数组,向数组中添加新列的最简单、最有效的方法似乎是使用
numpy.lib.recfunctions.append\u 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
所以

如果我们制造发电机,如:

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

genfromtxt
的第一个参数可以是一个生成器,在其中,当您在.mtadd中读取文件时,您可以在文件的每一行上创建一个空列。我刚刚再次遇到这个问题,我想知道您是否可以在回答中说明您所指的内容。谢谢谢谢索洛。我实际上想要的是有一个额外的行,它不存在于我正在读取的数据文件中。@shootingstars要添加额外的行,可以使用
np.vstack((a,np.zero((num_rows,a.shape[1])))
我的问题是,我调用它时,其中一个字段是
datetime
对象,这将阻止堆栈和numpy.lib.recFunctions
add_字段
合并数组。如果只有
genfromtxt
可以使用正则表达式作为分隔符,那么它现在对我来说将是一个完美的工具。
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]])