如果你必須在x
一個小矩陣在同一時間採取行動,你可以這樣做:
y = np.zeros_like(x)
for i in range(x.shape[0]):
y[i,...] = modify(x[i,...])
例如
In [595]: x=np.arange(24).reshape(4,3,2)
In [596]: y=np.zeros_like(x)
In [597]: for i in range(x.shape[0]):
.....: y[i,...]=x[i,...]*2
.....:
In [598]: y
Out[598]:
array([[[ 0, 2],
[ 4, 6],
...
[40, 42],
[44, 46]]])
追加到列表通常比多次「追加」到數組更好:
In [599]: y=[]
In [600]: for row in x:
.....: y.append(row*2)
.....:
In [601]: y=np.array(y)
非常大的情況下,你可以看到,如果vstack
(或連接軸= 0)更快。但是你必須明確地向數組添加開始維度。
In [615]: y=[]
In [616]: for row in x:
y.append((row*2)[None,:])
.....:
In [617]: np.vstack(y)
Python級循環,*特別*附加在循環中,使用NumPy的方式非常慢。你可以讓'modify'在所有'x'上以矢量化方式運行嗎? – user2357112
我很想去,但我不知道我是否可以。我的「修改」實際上是圖像的大小調整:'xmod = scipy.misc.imresize(x [i,:,:,0],1.3)'。我不認爲'imresize'可以被矢量化,但也許我錯了? – Fequish
最好的辦法是創建一個合適的最終大小的空白數組,然後將結果逐一分配給它。 – user2357112