追加 Python 3D Numpy 数组
Posted
技术标签:
【中文标题】追加 Python 3D Numpy 数组【英文标题】:Append Python 3D Numpy Array 【发布时间】:2018-01-14 11:35:40 【问题描述】:我有一些关于 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
?
【问题讨论】:
Atmp + A
没有给我任何错误。也许A += Atmp
?你需要明确你想要什么。
不,我的意思是将 Atmp 附加到数组 A
A = np.array((A0, A1, Atmp))
或 A = np.vstack((A, Atmp[None,...]))
np.append
是另一种使用np.concatenate
的方式,而且常常令人困惑。 np.r_
和 np.c_
也是 concatenate
前端。
【参考方案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)
【讨论】:
感谢您的回答,对我的问题很有帮助。这是一个大维度数组的问题,你能推荐一些关于这个方法的阅读吗? indexing docs 和np.pad
我认为这个答案不仅给了我问题的答案,而且还提供了在 python 中使用大问题数组的新方法。非常感谢你,我投票赞成接受答案【参考方案2】:
你可以试试这个:
A = np.concatenate([A, [Atmp]])
【讨论】:
谢谢你的回答,我想,这个回答对我的问题有用。【参考方案3】:您可以使用 reshape 将数组放入正确的形式:
np.reshape(Atmp,(1, Atmp.shape[0], Atmp.shape[1]))
然后追加为
np.vstack([A, np.reshape(Atmp,(1, 7, 7))])
【讨论】:
以上是关于追加 Python 3D Numpy 数组的主要内容,如果未能解决你的问题,请参考以下文章