pypto.transpose#
产品支持情况#
产品 |
是否支持 |
|---|---|
Ascend 950PR/Ascend 950DT |
√ |
Atlas A3 训练系列产品/Atlas A3 推理系列产品 |
√ |
Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
√ |
功能说明#
返回一个Tensor,该Tensor是输入Tensor的转置版本。指定的维度 dim0 和 dim1 将被交换。
函数原型#
transpose(input: Tensor, dim0: int, dim1: int) -> Tensor
参数说明#
参数名 |
输入/输出 |
说明 |
|---|---|---|
input |
输入 |
源操作数。 |
dim0 |
输入 |
源操作数,要交换的第一个维度的索引,从0开始计数。 |
dim1 |
输入 |
源操作数,要交换的第二个维度的索引,从0开始计数。 |
返回值说明#
返回一个与输入数据类型一致的Tensor,其中 dim0 与 dim1 的维度位置被对调。
约束说明#
TileShape和输入input维度一致,用于切分input。
输入维度dim0,dim1 的取值范围为:-D ≤ dim ≤ D-1,其中D为input的维度数。
当前Transpose实现存在约束,只能支持以下场景转置:
2维:任意轴
3维:任意轴
4维:支持:0轴和2轴,1轴和 3轴,2轴和3轴, 1轴和 2轴, 不支持:0轴和3轴, 0轴和1轴
5维:支持:3轴和 4轴,其他不支持
4.涉及尾轴转置的场景,需要预留一块临时空间,用来搬运。
示例:
input : [a, b, c, d] TileShape为[t0, t1, t2, t3] 数据类型为DT_FP32
dim0: 2
dim1: 3
预留的临时空间为:t0 * t1 * align(t2, 16) * align(t3, 32 / sizeof(DT_FP32))
调用示例#
TileShape设置示例#
说明:调用该operation接口前,应通过set_vec_tile_shapes设置TileShape。
TileShape维度应和输入input一致。
示例1:输入intput shape为[m, n, p],dim0为1,dim1为2,输出为[m, p, n], TileShape设置为[m1, n1, p1], 则m1, n1, p1分别用于切分m, n, p轴。
pypto.set_vec_tile_shapes(4, 16, 32)
接口调用示例#
x = pypto.tensor([2, 3], pypto.DT_FP32)
y = pypto.transpose(x, 0, 1)
结果示例如下:
输入数据x: [[ 1.0028, -0.9893, 0.5809],
[-0.1669, 0.7299, 0.4942]]
输出数据y: [[ 1.0028, -0.1669],
[-0.9893, 0.7299],
[0.5809, 0.4942]]