昇腾社区首页
中文
注册

AsStridedOperation

功能

根据指定参数,使用输入tensor生成一个数据重新排布过的输出tensor。

算子上下文

图1 AsStridedOperation

算子功能实现描述

AsStrided算子的功能是基于已有的张量创建一个新的视图(view),可以通过指定形状(shape)和步长(strides)来重新排列元素。

映射关系(以输入为 3x3 shape、输出为 2x2 shape 为例)

  • 输入
    inTensor = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    opParam.size = [2, 2]
    opParam.stride = [2, 3]
    opParam.offset = [0]
  • 输出
    outTensor = [[1, 4], [3, 6]]

映射关系为:outTensor[i][j] -> v_inTensor[ i * stride[0] + j * stride[1] + offset[0]]。

其中:v_inTensor 为 输入tensor展开的一维向量。

图2 AsStrided算子实现原理(offset为0时)
  • offset不为0时的输出:

    若加上 offset:opParam.offset = [2]。

    则计算后输出为:outTensor = [[3, 6], [5, 8]]。

    图3 AsStrided算子实现原理(offset不为0时)

定义

struct AsStridedParam {
    SVector<int64_t> size;
    SVector<int64_t> stride;
    SVector<int64_t> offset;
};

参数列表

成员名称

类型

默认值

描述

size

SVector<int64_t>

-

输出tensor的shape。

“size”的长度要求小于或等于8且各元素要求大于0。

stride

SVector<int64_t>

-

用于从输入tensor推导输出tensor的各维度的步长。

“stride”的长度要求与size一致,各元素要求大于或等于0。

offset

SVector<int64_t>

-

输出tensor内存相对于输入tensor内存的偏移,作为常数使用。

“offset”的长度要求为1且元素要求大于或等于0。

输入

参数

维度

数据类型

格式

描述

x

[din_0, ..., din_n]

float16/int64

ND

输入tensor。

输出

参数

维度

数据类型

格式

描述

y

[dout_0, ..., dout_m]

float16/int64

ND

输出tensor

规格约束

Param参数约束

  • offset.size() == 1,offset.at(i) ≥ 0。
  • size.size() ≤ 8,size.at(i) > 0。
  • stride.size() == size.size(),stride.at(i) ≥ 0。