I read in a sequence of numbers with
np.array(f.read().split(),dtype=np.float64)
然后我使用 np.reshape()
将其转换为二维数组。
在此之后,如何将 arr
转换为记录数组?我尝试了(类似于)以下内容:
filename = 'unstructured-file.txt'
nfields = 3
names = ('r','g','b')
with open(filename,'r') as f:
arr = np.array(f.read().split(),dtype=np.float64)
arr = arr.reshape(-1,nfields)
out = np.array(arr,dtype=zip(names,['float64']*length(names))
但是显示 TypeError:期望可读取的缓冲区对象
有什么建议吗?
编辑:我想要做的主要事情是给我的列命名。
而不是
out = np.array(arr,dtype=zip(names,['float64']*length(names))
如果我使用这个,
out = np.core.records.fromrecords(arr.reshape(-1,nfields),names=','.join(names))
我可以使用
out['r']
等,但是out.dtype.names
为None。这是怎么回事?
编辑2
非结构化文件看起来像: Some text
More text
100 1.000000E-01 46
-1.891701E+04 1.702921E+02 -2.323660E+04 4.547841E+03 -2.778444E+04
0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.149862E+04
1.753467E+02 3.410277E+03 -1.034898E+05 2.778692E+04 0.000000E+00
0.000000E+00 0.000000E+00 0.000000E+00 1.492281E+04 0.000000E+00
0.000000E+00 0.000000E+00 9.000000E+01 9.000000E+01 9.000000E+01
0.000000E+00 -4.774939E-01 0.000000E+00 0.000000E+00 0.000000E+00
-2.243495E-01 3.513048E-01 -2.678782E-01 3.513048E-01 -7.155493E-01
5.690034E-01 -2.678782E-01 5.690034E-01 -4.783123E-01 2.461974E+01
0.000000E+00 0.000000E+00 0.000000E+00 2.461974E+01 0.000000E+00
0.000000E+00 0.000000E+00 2.461974E+01
200 2.000000E-01 46
-1.891815E+04 1.421984E+02 -2.424678E+04 5.199451E+03 -2.944623E+04
0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.174561E+04
1.274613E+02 -6.004790E+01 -1.139308E+05 2.944807E+04 0.000000E+00
0.000000E+00 0.000000E+00 0.000000E+00 1.445855E+04 0.000000E+00
0.000000E+00 0.000000E+00 9.000000E+01 9.000000E+01 9.000000E+01
0.000000E+00 7.785923E-01 0.000000E+00 0.000000E+00 0.000000E+00
8.123304E-01 3.023486E-01 -5.891595E-01 3.023486E-01 -8.560144E-02
-3.830618E-01 -5.891595E-01 -3.830618E-01 1.608437E+00 2.436174E+01
0.000000E+00 0.000000E+00 0.000000E+00 2.436174E+01 0.000000E+00
0.000000E+00 0.000000E+00 2.436174E+01
unstructured-file.txt
是什么样子的吗? - unutbuout=arr.view(...)
会使out
成为arr
的一个视图。因此,修改out
也会修改arr
。它们共享相同的底层数据。我添加了copy()
以使out
成为一个独立的数组。两种方法都有用; 这取决于你想做什么。 - unutbu