首页 > 解决方案 > 将文本文件读入结构化 2D numpy 数组

问题描述

我有一个结构化的 2D numpy 形状数组:[2,2]

填充示例 [2,2] 数组:

Main_Clt_data_array :

[ [ ((10, 10), 20, 300.) ((20, 20), 20, 300.) ]
  [((30, 30), 30, 300.) ((40, 40), 40, 300.)] ] 

它属于以下数据类型

Cord_dtype = np.dtype([('X', np.float64), ('Y', np.float64)])
Clt_data_dtype=np.dtype([('Coord', Cord_dtype),('Angle', np.float64), ('Length', np.float64)])

使用np.savetxti 能够将数组保存到保持相同形状和顺序的 txt 文件中。

'Trial.txt' : 在此处输入图片描述


但是当我尝试使用 genfromtxt 读入 python 时,它不起作用。: 示例:

read_array = np.genfromtxt('Trial.txt',dtype=Clt_data_dtype)

输出

('READ_ARRAY_shape :', (2L,))

('READ_ARRAY :', array([((nan, nan), nan, nan), ((nan, nan), nan, nan)], 'V32'))

希望有人可以指导我,并提前感谢您的任何意见

另请注意,我不能使用 pandas,因为我只运行 numpy 兼容程序

标签: pythonarraysnumpy

解决方案


In [17]: Cord_dtype = np.dtype([('X', np.float64), ('Y', np.float64)])
    ...: Clt_data_dtype=np.dtype([('Coord', Cord_dtype),('Angle', np.float64), ('Length', np.float64)])

创建你的数组:

In [18]: arr = np.array([ [ ((10, 10), 20, 300.), ((20, 20), 20, 300.) ],
    ...:   [((30, 30), 30, 300.), ((40, 40), 40, 300.)] ], dtype=Clt_data_dtype)
    ...: 
    ...: 
In [19]: arr
Out[19]: 
array([[((10., 10.), 20., 300.), ((20., 20.), 20., 300.)],
       [((30., 30.), 30., 300.), ((40., 40.), 40., 300.)]],
      dtype=[('Coord', [('X', '<f8'), ('Y', '<f8')]), ('Angle', '<f8'), ('Length', '<f8')])
In [20]: arr.shape
Out[20]: (2, 2)

genfromtxt可以从csv样式文件重新创建它,例如:

In [21]: txt = """10 10 20 300.
    ...: 20 20 20 300.
    ...: 30 30 30 300.
    ...: 40 40 40 300.
    ...: """
     
In [22]: np.genfromtxt(txt.splitlines(), dtype=Clt_data_dtype)
Out[22]: 
array([((10., 10.), 20., 300.), ((20., 20.), 20., 300.),
       ((30., 30.), 30., 300.), ((40., 40.), 40., 300.)],
      dtype=[('Coord', [('X', '<f8'), ('Y', '<f8')]), ('Angle', '<f8'), ('Length', '<f8')])

以真正的csv方式,它只包含数字的行和列。它没有分隔符和()你的img节目。可能可以解析您的图像并创建文件,但csv阅读器无法处理。


推荐阅读