将文本文件读入结构化 2D numpy 数组

Posted

技术标签:

【中文标题】将文本文件读入结构化 2D numpy 数组【英文标题】:Reading text file into structured 2D numpy array 【发布时间】:2021-02-25 19:24:22 【问题描述】:

我有一个结构化的 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.savetxt 我能够将数组保存到一个 txt 文件中,保持相同的形状和顺序。

'Trial.txt': enter image description here


但是当我尝试使用 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 兼容程序

【问题讨论】:

trial.txt 足够小,您可以将其复制粘贴到问题中。我们比图像更喜欢它。你用了什么savetxt 命令? 【参考方案1】:
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 阅读器无法处理。

【讨论】:

以上是关于将文本文件读入结构化 2D numpy 数组的主要内容,如果未能解决你的问题,请参考以下文章

c++ 将文本文件中的 3 列读入 2D 数组或 3 个单独的数组

无法将制表符分隔的文件读入 numpy 二维数组

Python将文本文件读入2D阵列并访问数据

VB6.0中如何实现逐行读入文本文件?

Python Numpy数组的读入存储操作

c#读取文本文档实践3-写入到文本本文档