【发布时间】:2022-10-21 16:03:44
【问题描述】:
如何有效地将.csv 文件转换为.npy?
我试过了:
import numpy as np
filename = "myfile.csv"
vec =np.loadtxt(filename, delimiter=",")
np.save(f"{filename}.npy", vec)
虽然上述文件适用于较小的文件,但我正在处理的实际 .csv 文件有大约 1200 万行和 1024 列,在转换为 .npy 格式之前将所有内容加载到 RAM 中需要很多时间。
问(第 1 部分):对于大型 CSV 文件,是否有某种方法可以有效地将 .csv 加载/转换为 .npy?
上面的代码 sn-p 类似于来自Convert CSV to numpy 的答案,但不适用于~12M x 1024 矩阵。
问(第 2 部分):如果没有任何方法可以有效地将.csv 加载/转换为.npy,是否有某种方法可以有效地将.csv 文件迭代读入.npy?
此外,https://stackoverflow.com/a/53558856/610569 这里有一个答案,可以将 csv 文件迭代地保存为 numpy 数组。但似乎np.vstack 不是读取文件时的最佳解决方案。那里接受的答案建议 hdf5 但格式不是这个问题的主要目标,并且在我的用例中不需要 hdf5 格式,因为之后我必须将它读回一个 numpy 数组。
Q(Part 3):如果part 1和part2都不行,那么在加载保存的存储格式时,是否还有其他高效的存储(例如tensorstore)可以存储并高效转换为numpy数组?
还有另一个库tensorstore 似乎可以有效地处理在读取时支持转换为numpy 数组的数组https://google.github.io/tensorstore/python/tutorial.html。但不知何故,没有任何关于如何在没有确切尺寸的情况下保存tensor/array 的信息,所有示例似乎都包括'dimensions': [1000, 20000], 之类的配置。
与 HDF5 不同,从 docs 转换为 numpy 时,tensorstore 似乎没有读取开销问题:
转换为 numpy.ndarray 还隐式执行同步读取(由于刚刚检索到同一区域,因此会命中内存缓存)
【问题讨论】:
-
不是很有帮助,但您可以自己编写代码以保存为 NumPy 格式,并且完全跳过与 numpy 代码的任何交互。最困难的部分是创建标题字节numpy.org/devdocs/reference/generated/numpy.lib.format.html
-
哪个是大用户,loadtxt 还是 save?
np.save是数组数据的直接写入,所以应该比较快。loadtxt是或曾经是 python 文本处理,尽管最近的版本应该更快
标签: python numpy csv tensor feature-store