我对3D python 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]
A = (2, 7, 7)
和Atmp = (7,7)
的维度。
如何追加Atmp to A
?
答案 0 :(得分:2)
如果您可以提供帮助,请不要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)
答案 1 :(得分:1)
您可以使用reshape以正确的形式放置数组:
np.reshape(Atmp,(1, Atmp.shape[0], Atmp.shape[1]))
然后追加为
np.vstack([A, np.reshape(Atmp,(1, 7, 7))])
答案 2 :(得分:1)
你可以试试这个:
A = np.concatenate([A, [Atmp]])