【问题标题】:Can NumPy directly load data into a Fortran ordered array?NumPy 可以直接将数据加载到 Fortran 有序数组中吗?
【发布时间】:2016-12-09 18:07:11
【问题描述】:

我经常使用[x, y, z] 格式的文本文件中存储的数据。将数据加载到 NumPy 数组时,可以方便地维护文本文件的顺序,其中每一列是不同的元素,x、y 或 z。这样做的缺点是 NumPy 使用 C 排序作为默认值,对所有 x 值进行操作意味着访问不连续的内存块。

要将数据加载到 Fortran 有序数组中,我可以使用

data = numpy.asfortranarray(numpy.loadtxt('data.txt'))

但是有没有办法在一行中做到这一点?查看loadtxt 文档,此方法似乎没有提供该功能。有没有另一个加载函数呢?

【问题讨论】:

  • 您是否意识到loadtxt 可以预先为一行分配内存但不能为一列分配内存?所以它所能做的最好的就是以 C 顺序读取数组,然后将其转换为 F 顺序。

标签: python arrays numpy memory


【解决方案1】:

loadtxtgenfromtxt 都逐行读取文件并将结果收集到列表列表(或元组列表)中。最后,他们将其转换为数组。大致:

rows = []
for line in f.readline():
    values = [float(i) for i  in line.split(delimiter)]
    rows.append(values)
data = np.array(rows)

您可以编写自己的阅读器!或者只是接受这个额外的后期处理。它看起来不难也不贵。

【讨论】:

  • 这是有道理的。本质上,因为文件存储在行中,要获得列优先数组,Fortran 排序,必须使用行优先排序,C 排序读取文件,然后进行转换。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-18
  • 1970-01-01
  • 1970-01-01
  • 2020-12-16
  • 1970-01-01
  • 2014-10-18
  • 2021-06-28
相关资源
最近更新 更多