如何在numpy中去交错数组?

2024-05-06

我有一个 numpy 数组,它以一种棘手的方式交错,但我无法找到一种简单的方法来解除交错。假设 (84, 132) 矩阵为:

0   100  200 ...
1   101  201 ...
2   102  202 ...
...
83  183  283 ...

我想从第一列开始每隔四个元素,然后从第二行开始每隔四个元素,然后从第三行开始每隔四个元素,然后从第四行开始每隔四个元素。 (产生四个新列。)然后我想重复第二列,依此类推。所以我想要的 (21, 528) 结果是:

0   1  2  3 100 101 102 103 200 ...
4   5  6  7 104 105 106 107 204 ...
8   9 10 11 108 109 110 111 208 ...
...
80 81 82 83 180 181 182 183 283 ...

我可以用循环来完成此操作,转换 (84, 132) 数组a到 (21, 528) 数组b:

b = np.zeros(shape=(21, 132*4))
for y in range(0, 21):
  for x in range(0, 132):
    for s in range(0, 4):
      b[y, x * 4 + s] = a[y * 4 + s, x]

有没有更好的方法来使用 numpy 操作来做到这一点?

(上下文:这是 8086 处理器中微码 ROM 的物理排列,我正在尝试对这些位进行重新排列以进行分析。)


借用想法来排列轴并重塑General idea for nd to nd transformation https://stackoverflow.com/a/47978032/. -

N = 4 # number of rows to split with
n = a.shape[1]
a.reshape(-1,N,n).swapaxes(1,2).reshape(-1,n*N)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在numpy中去交错数组? 的相关文章

随机推荐