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.recFunctionsadd_字段
合并数组。如果只有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]])