请教下各位大佬,如何使用多笔transpose来代替单笔transpose?
有这个需求是因为dma本身的硬件限制。
比如说针对下面这个case
一个5d的tensor, shape = [4, 8, 16, 32, 64], permutation = [4, 3, 0, 2, 1].
通过numpy 可以一次转置成 [64, 32, 4, 16, 8], 也可以分成三次转置来变成 [64, 32, 4, 16, 8]。
这两种最终得到的结果是等价的,但是后者通过三次转置,每次转置的维度不超过三维,更容易被硬件接受。
所以有什么办法可以找到 针对任意permutation 来拆分成多次transpose的 通用解决办法呢?
sample code:
import numpy as np
in_data = np.arange(0, 4 * 8 * 16 * 32 * 64).reshape(4, 8, 16, 32, 64)
perm = [4, 3, 0, 2, 1]
gold = np.transpose(in_data, perm)
test = in_data
test = np.transpose(test, [3, 4, 0, 1, 2])
test = np.transpose(test, [0, 1, 2, 4, 3])
test = np.transpose(test, [1, 0, 2, 3, 4])
print(gold.shape)
print(test.shape)
np.testing.assert_array_equal(test, gold)
重写写了一个你再试试: