我正在尝试创建一个形状为 (a, b, 1, d) 的 numpy 数组(比如说 A),其中 d 未知并根据我的输入而变化。我有另一个形状为 (a, b, 1, 1) 的数组(假设为 B)。我想将 for 循环中的 B 值附加到 A 中。在 matlab 中可以轻松完成:
a = zeros(a, b, 1, 1)
count = 0
for i = 1 : something
ai = array of shape (a, b, 1, 1)
count += 1
a(:, :, 1, count) = ai
end
如何在 python 中获得类似的结果?
最佳答案
MATLAB 可以简单地通过索引新值来增长矩阵; numpy 不允许这样做。但是您可以连接 A
和 B
创建形状为 (a,b,1,d+1)
In [1187]: np.concatenate((np.ones((2,3,1,4)), np.ones((2,3,1,1))), axis=-1).shape
Out[1187]: (2, 3, 1, 5)
但是如果您想多次执行此操作,我建议将中间数组收集在一个列表中,并在最后进行一次串联。这样效率更高。
In [1189]: a = [np.zeros((2,3,1,1))]
In [1190]: for i in range(4):
...: a.append(np.ones((2,3,1,1))*i)
...: a = np.concatenate(a, axis=-1)
...:
In [1191]: a.shape
Out[1191]: (2, 3, 1, 5)
In [1192]: a
Out[1192]:
array([[[[ 0., 0., 1., 2., 3.]],
....
[[ 0., 0., 1., 2., 3.]]]])
关于python - python 中的动态 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45852502/