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。