【发布时间】:2021-04-16 23:18:59
【问题描述】:
假设给定以下数组:
a = array([[[4, 7, 1],
[3, 8, 1],
[0, 3, 7],
[1, 5, 5],
[1, 7, 6]],
[[8, 1, 0],
[2, 1, 4],
[1, 7, 2],
[6, 2, 0],
[3, 2, 6]],
[[4, 3, 1],
[0, 3, 9],
[1, 6, 2],
[6, 5, 7],
[1, 3, 2]],
[[7, 3, 7],
[8, 1, 3],
[9, 9, 4],
[2, 6, 8],
[4, 4, 5]],
[[4, 8, 1],
[2, 0, 3],
[4, 8, 9],
[3, 7, 2],
[7, 3, 1]]])
b = array([[[8, 3, 2],
[1, 7, 9],
[0, 0, 6],
[1, 0, 1],
[6, 0, 2]],
[[1, 0, 0],
[8, 6, 9],
[8, 2, 2],
[6, 6, 5],
[2, 0, 8]],
[[6, 2, 4],
[4, 5, 4],
[4, 7, 4],
[3, 7, 8],
[0, 9, 5]],
[[7, 9, 0],
[5, 4, 9],
[7, 5, 9],
[0, 0, 5],
[4, 7, 2]],
[[0, 2, 0],
[4, 7, 7],
[6, 7, 6],
[2, 5, 3],
[6, 0, 5]]])
如何将行交错以使形状为 (5, 5, 6) 并且最后一个轴上的值为
4, 8, 7, 3, 1, 2
对于该行的其余部分重复此操作。我已经尝试过来自Interweaving two numpy arrays 的示例,但它不起作用,因为重塑导致形状不匹配。非常感谢一个 numpy 解决方案。
【问题讨论】:
-
链接问题的公认答案不正是您想要的吗?
c = np.empty((5, 5, 6), dtype=a.dtype); c[...,0::2] = a; c[...,1::2] = b; c[0,0]? -
我会尝试将它们重塑为 (5,5,3,1),在最后一个轴上连接以获得 (5,5,3,2)。最后重塑为(5,5,6)`
-
@Reti43 很好,有没有办法通过 dstack 等操作来做到这一点?我想避免对索引进行硬编码
-
你不必硬编码,我只是为了方便而做了。
s = a.shape; new_shape = (s[0], s[1], 2*s[2])。或者,如果您想让它更通用,new_shape = s[:-1] + (2*s[-1],)。