【发布时间】:2018-01-04 21:42:48
【问题描述】:
条件如下:
1) 我们有一个 N-D 数组列表,这个列表的长度未知 M
2) 每个数组的维数相等,但未知
3) 每个数组应沿第 0 维拆分,生成的元素应沿长度为 M 的第 1 维分组,然后沿相同长度的第 0 维堆叠
4) 结果排名应为N+1,第一维的长度应为M
以上与zip 相同,但在 N-D 数组的世界中。
目前我的做法如下:
xs = [list of numpy arrays]
grs = []
for i in range(len(xs[0])):
gr = [x[i] for x in xs]
gr = np.stack(gr)
grs.append(gr)
grs = np.stack(grs)
我可以用批量操作写得更短吗?
更新
这就是我想要的
将 numpy 导入为 np
sz = 2
sh = (30, 10, 10, 3)
xs = []
for i in range(sz):
xs.append(np.zeros(sh, dtype=np.int))
value = 0
for i in range(sz):
for index, _ in np.ndenumerate(xs[i]):
xs[i][index] = value
value += 1
grs = []
for i in range(len(xs[0])):
gr = [x[i] for x in xs]
gr = np.stack(gr)
grs.append(gr)
grs = np.stack(grs)
print(np.shape(grs))
此代码显然可以正常工作,生成形状为(30, 2, 10, 10, 3) 的数组。是否可以避免循环?
【问题讨论】:
-
嗯...如果您可以提供某种示例输入和输出,它会变得更加清晰。
-
然后您将从样本输入中获取尺寸,但我想避免这种情况:)
标签: python arrays numpy interleave