【问题标题】:Append Python 3D Numpy Array追加 Python 3D Numpy 数组
【发布时间】: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 前端。

标签: python arrays numpy append


【解决方案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)

【讨论】:

  • 感谢您的回答,对我的问题很有帮助。这是一个大维度数组的问题,你能推荐一些关于这个方法的阅读吗?
  • 我认为这个答案不仅给了我问题的答案,而且还提供了在 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))])

【讨论】:

    猜你喜欢
    • 2015-02-21
    • 2018-09-28
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 2016-04-08
    • 2014-11-03
    • 2021-04-15
    • 1970-01-01
    相关资源
    最近更新 更多