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