【问题标题】:Converting huge txt-file with x,y,z coordinates to np.arrays将带有 x,y,z 坐标的巨大 txt 文件转换为 np.arrays
【发布时间】:2020-01-17 00:28:19
【问题描述】:

所以我有一个巨大的 .txt 文件,其中包含大约 4 000 000 个坐标,格式如下:

315987 5587999 718.80
315988 5587999 718.87
315989 5587999 719.03
315990 5587999 718.94
315991 5587999 718.97
...

所以我现在的任务是使用 python 脚本从这个 txt 文件中读取这些坐标,并将每个轴的数据存储在一个元组(np 数组)中,这样我就可以在元组上使用像 np.flatten 这样的方法。

对于这个任务,我在 stackoverflow 上找到了很多答案,但不知何故有点令人困惑,我无法按照自己的意愿实现它。

这是我的代码:

def get_stl():

with open('test.txt') as f:
    for line in f:
        x, y, z = (float(a) for a in line.split())

    X, Y = np.meshgrid(x, y, z)
    Z = z;
    return X, Y, Z

x, y, z = get_stl()

xyz = np.zeros(shape=(x.size, 3))
xyz[:, 0] = x.flatten()
xyz[:, 1] = y.flatten()
xyz[:, 2] = z.flatten()

所以很明显z.flatten() 无法执行,因为我没有将 z 读为 np.array。

我的问题是如何正确读取那个大的 txt.file,尤其是 z 坐标。

谢谢!

编辑

我不想使用 CSV,因为它会占用内存

【问题讨论】:

  • 将您的 txt 视为 csv 文件(以空格作为分隔符),然后再次检查 SO。或者你可以检查一下:riptutorial.com/numpy/example/22990/reading-csv-files
  • 对于元组(np-array)中的每个轴,所以我可以在元组上使用 np.flatten 之类的方法。 你能扩展一下吗,我不确定我理解正确。
  • @AMC 如你所见,我在每个元组(最后三行)上使用 np 方法 flatten()
  • @SamuelDressel 我的意思是你想做什么,你想要的输出是什么,它有什么用?

标签: python arrays numpy tuples


【解决方案1】:
import numpy as np
data = np.genfromtxt('test.txt', delimiter=' ')

array([[3.159870e+05, 5.587999e+06, 7.188000e+02],
       [3.159880e+05, 5.587999e+06, 7.188700e+02],
       [3.159890e+05, 5.587999e+06, 7.190300e+02],
       [3.159900e+05, 5.587999e+06, 7.189400e+02],
       [3.159910e+05, 5.587999e+06, 7.189700e+02]])

【讨论】:

  • 嗯,我有点想访问每个坐标
  • @SamuelDressel 你什么意思?我觉得这个解决方案很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-27
  • 2022-12-10
  • 1970-01-01
  • 2011-03-02
  • 2015-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多