逐步构建numpy数组的最佳方法是什么?

And*_*bis 7 python arrays numpy

什么是增量构建numpy数组的最有效方法,例如一次一行,而不事先知道最终大小?

我的用例如下.我需要加载一个大文件(10-100M行),每行需要字符串处理,并应形成一行numpy数组.

将数据加载到临时Python列表并转换为数组是否更好?或者numpy中是否存在一些可以提高效率的现有机制?

der*_*icw 8

除了将每行附加到列表然后转换为ndarray之外,您应该获得更好的性能.

这是一个测试,我将ndarrays附加到列表10000次,然后在完成后生成一个新的ndarray:

row = np.random.randint(0,100, size=(1,100))
Run Code Online (Sandbox Code Playgroud)

我用ipython笔记本计时:

%%timeit
l = [row]

for i in range(10000):
    l.append(row)

n = np.array(l)
Run Code Online (Sandbox Code Playgroud)

- > 10个循环,最佳3:132 ms每个循环

这是一个测试,我连接每一行:

%%timeit
l = row

for i in range(10000):
    l = np.concatenate((l, row),axis=0)
Run Code Online (Sandbox Code Playgroud)

- > 1个循环,最佳3:每循环23.1秒

方式慢一点.

第一种方法的唯一问题是你将同时在内存中同时使用列表和数组,因此你可能会遇到RAM问题.您可以通过以块为单位来避免这种情况.