相关疑难解决方法(0)

将2D numpy数组转换为结构化数组

我正在尝试将二维数组转换为带有命名字段的结构化数组.我希望2D数组中的每一行都是结构化数组中的新记录.不幸的是,我所尝试的一切都没有按照我的预期进行.

我开始时:

>>> myarray = numpy.array([("Hello",2.5,3),("World",3.6,2)])
>>> print myarray
[['Hello' '2.5' '3']
 ['World' '3.6' '2']]
Run Code Online (Sandbox Code Playgroud)

我想转换为看起来像这样的东西:

>>> newarray = numpy.array([("Hello",2.5,3),("World",3.6,2)], dtype=[("Col1","S8"),("Col2","f8"),("Col3","i8")])
>>> print newarray
[('Hello', 2.5, 3L) ('World', 3.6000000000000001, 2L)]
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

>>> newarray = myarray.astype([("Col1","S8"),("Col2","f8"),("Col3","i8")])
>>> print newarray
[[('Hello', 0.0, 0L) ('2.5', 0.0, 0L) ('3', 0.0, 0L)]
 [('World', 0.0, 0L) ('3.6', 0.0, 0L) ('2', 0.0, 0L)]]

>>> newarray = numpy.array(myarray, dtype=[("Col1","S8"),("Col2","f8"),("Col3","i8")])
>>> print newarray
[[('Hello', 0.0, 0L) ('2.5', 0.0, 0L) ('3', 0.0, 0L)]
 [('World', 0.0, 0L) ('3.6', 0.0, 0L) ('2', …
Run Code Online (Sandbox Code Playgroud)

python numpy

33
推荐指数
3
解决办法
2万
查看次数

如何将常规numpy数组转换为记录数组?

我读了一系列数字

np.array(f.read().split(),dtype=np.float64)
Run Code Online (Sandbox Code Playgroud)

然后我使用它将其转换为二维数组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))
Run Code Online (Sandbox Code Playgroud)

但是说 TypeError: expected a readable buffer object

有什么建议?

编辑:我想要做的主要是命名我的列.

代替

out = np.array(arr,dtype=zip(names,['float64']*length(names))
Run Code Online (Sandbox Code Playgroud)

如果我用这个,

out = np.core.records.fromrecords(arr.reshape(-1,nfields),names=','.join(names))
Run Code Online (Sandbox Code Playgroud)

我可以使用out['r']等等,但是out.dtype.names是无.到底是怎么回事?

EDIT2

非结构化文件看起来像

 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 …
Run Code Online (Sandbox Code Playgroud)

python numpy

3
推荐指数
1
解决办法
2345
查看次数

标签 统计

numpy ×2

python ×2