2017-08-07 143 views
1

我對3D的python numpy的尺寸的A = (2, 7, 7)追加Python的3D numpy的陣列

import numpy as np 
n = 5 
m = 4 

Sc = np.random.rand(m,n,n) 
S1 = np.zeros((1,n+2)) 
S2 = np.zeros((n,1)) 

A0 = np.r_[S1, np.c_[S2, Sc[0], S2], S1] 
A1 = np.r_[S1, np.c_[S2, Sc[1], S2], S1] 
#print(A) 
#print(B) 
A = np.array([A0,A1]) 
A.shape 
Atmp = np.r_[S1, np.c_[S2, Sc[2], S2], S1] 

Atmp = (7,7)維度一些問題。

如何附加Atmp to A

+2

'ATMP + A'沒有給出任何錯誤我。也許'A + = Atmp'?你需要明確你想要的東西。 –

+0

不,我的意思是將Amp加到Atmp數組A –

+1

'A = np.array((A0,A1,Atmp))'或'A = np.vstack((A,Atmp [None,...]))'' – gboffi

回答

1

不要concatenate/append/stack數組,如果你可以幫助它,尤其是大的。這是非常浪費記憶和緩慢。

指定A = np.empty((m, n+2, n+2))然後用A[i] = np.r_[S1, np.c_[S2, Sc[i], S2], S1]填充它。或者做矢量和擺脫for循環:

A = np.zeros((m, n+2, n+2)) 
A[:,1:-1,1:-1] = Sc 

,甚至做一個行:

A = np.pad(Sc, ((0,0),(1,1),(1,1)), 'constant', constant_values = 0) 
+0

謝謝你的回答,這對我的問題非常有幫助。這是一個很大的維度數組問題,你能爲這種方法提供一些解讀嗎? –

+0

[索引文檔](https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html)和['np.pad'](https://docs.scipy.org/doc/numpy /reference/generated/numpy.pad.html) –

+0

我認爲這個答案不僅給我這個問題的答案,而且在python中使用大問題數組的新方法。非常感謝,我爲接受答案投票 –

1

您可以使用重塑擺在正確的形式排列:

np.reshape(Atmp,(1, Atmp.shape[0], Atmp.shape[1])) 

然後追加爲

np.vstack([A, np.reshape(Atmp,(1, 7, 7))]) 
1

你可以試試這個:

A = np.concatenate([A, [Atmp]]) 
+0

謝謝您的回答,我認爲,這個答案適用於我的問題。 –

+0

@RioHarapanPangihutan歡迎您! –