2017-08-07 134 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欢迎您! –