我有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),依此类推。
答案 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