有效地将大型numpy数组的片段复制到较小的连续内存阵列

时间:2014-09-05 00:11:44

标签: python arrays performance numpy

我需要尽可能有效地将切片从大型numpy数组复制到另一个较小的数组。最终,较小的数组将作为二维数组传递到C函数中进行处理。因此,必须在连续的内存块中复制子数组数据。

在下面的示例中,我试图预先分配较小的数组( aa )以提高效率,但我认为这会在每次迭代进行复制之前产生新创建的数组。

import numpy as np

M=1024
N=8
a = np.zeros((2,M),dtype=np.float32,order='C')
aa = np.zeros((2,N),dtype=np.float32,order='C')
for n in xrange(M/N):
    aa = a[:,n*N:n*N+N]
    #pass array to c function - e.g. foo(aa,aa.shape[0],aa.shape[1])
    print aa
    a[:,n*N:n*N+N] = aa

1 个答案:

答案 0 :(得分:2)

您希望执行aa[:] = a[:, n*N:n*N+N],以便将a中的数据复制到预先存在的aa数组中,而不是在每次迭代中创建一个新数据,并且其他人扔掉了。

编辑考虑OP的情况两次,因为子阵列是用切片提取的,aa在每次迭代中不会是一个新数组,而是一个新的视图数组a。因此它不会是连续的,这可能是比性能更大的关注。最初分配的aa数组在第一次迭代中未使用垃圾回收。