Numpy dstack for 3d arrays

时间:2018-01-03 12:28:23

标签: python-3.x numpy

我有N个3d数组,固定大小(n1,n2,n3) 现在我想将它们组合成4d数组,结果得到维数的数组:

(N,n1,n2,n3)

我该怎么办? Dstack正在做同样的事情,但仅限于2D阵列使其成为3D。试图为3D数组制作它会产生错误的结果(n1,n2,n3 * N)

编辑1:我需要在循环中完成它,所以循环中的每次迭代都会给出新的(n1,n2,n3)数组(3d数组),我应该把它放到4D数组中增加它的第一个维度:第一次迭代将给出(1,n1,n2,n3)

然后第二次迭代将给出(2,n1,n2,n3),依此类推。

1 个答案:

答案 0 :(得分:4)

dstack仅用于向后兼容。请改用numpy.stack,这是更通用和未来的证明:

import numpy as np

a = np.ones((4, 5, 6))
b = np.zeros((4, 5, 6))

c = np.stack([a, b])
print(c.shape)  # (2, 4, 5, 6)

d = np.stack([a, b], axis=2)  # You can stack along any axis
print(d.shape)  # (4, 5, 2, 6)

Loopy示例:

result = []
for i in range(n):
    x = np.random.randn(n1, n2, n3)
    result.append(x)
result = np.stack(result)

替代(慢):

result = np.empty((0, n1, n2, n3))
for i in range(n):
    x = np.random.randn(n1, n2, n3)
    result = np.concatenate([result, x[np.newaxis]])

如果您事先知道N,也可以预先分配:

result = np.empty((n, n1, n2, n3))
for i in range(n):
    x = np.random.randn(n1, n2, n3)
    result[i] = x