And*_*bis 7 python arrays numpy
什么是增量构建numpy数组的最有效方法,例如一次一行,而不事先知道最终大小?
我的用例如下.我需要加载一个大文件(10-100M行),每行需要字符串处理,并应形成一行numpy数组.
将数据加载到临时Python列表并转换为数组是否更好?或者numpy中是否存在一些可以提高效率的现有机制?
除了将每行附加到列表然后转换为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问题.您可以通过以块为单位来避免这种情况.