2
我需要尽可能有效地将切片从大的numpy阵列复制到另一个较小的阵列。最终,较小的数组将作为二维数组传递给C函数进行处理。因此,必须将子数据数据复制到连续的内存块中。有效地将较大的numpy阵列的切片复制到较小的连续内存阵列
在下面的示例中,我试图预先分配较小的阵列(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
我一直在想这件事。所以,如果'aa'被初始化为一个数组,'aa [:] = ...'将数据复制到预先存在的数组中?而如果我们写'aa = a',它会用'a [']'写'aa'? – 2014-09-05 12:53:33
类别。当你添加'[:]'时,你会触发对ndarray的'__setitem__'方法的调用,该方法试图将rhs复制到数组中。如果你不这样做,那么正常的Python语义正在工作,并且你在lhs上指定标签以指向rhs上的对象。如果lhs标签指向别的东西,它就不再会了,因此它可能会被垃圾收集。 – Jaime 2014-09-05 14:00:20