追加 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 数组的主要内容,如果未能解决你的问题,请参考以下文章

python numpy数组追加在.py文件中不起作用,但在终端中起作用

未成功追加到空 NumPy 数组

将空行插入或追加到 numpy 数组

在追加模式下加载使用 numpy.save 保存的数组

有没有办法在没有numpy的情况下追加二维数组?

追加/合并二维数组