SetValueOperation

功能

将输入源张量中的内容拷贝到输入目标张量指定位置中。

算子上下文

图1 SetValueOperation算子上下文

算子功能实现

该拷贝为原地拷贝,最终结果修改在输入目标张量中。

例如:输入目标张量dst: (a,b,c),输入源张量src: (d,e,f)

dst[starts[0]: ends[0], starts[1]: ends[1], starts[2]: ends[2]] = src

其中,starts[0]: ends[0]长度为src第0维的维度大小,starts[1]: ends[1]长度为src第1维的维度大小,starts[2]: ends[2]长度为src第2维的维度大小。

定义

struct SetValueParam {
     SVector<int64_t> starts;
     SVector<int64_t> ends;
     SVector<int64_t> strides;
};

成员

成员名称

类型

默认值

描述

starts

SVector<int64_t>

-

每一维拷贝起始位置。

ends

SVector<int64_t>

-

每一维拷贝结束位置后一个位置,拷贝到该位置前一个位置为止。

strides

SVector<int64_t>

-

每一维拷贝步长,当前仅支持strides为全1。

输入

参数

维度

数据类型

格式

描述

src

[dim_0,dim_1,...,dim_n]

float16/float/int32/int64

ND

输入tensor1。

dst

src的所有维度都小于等于dst对应的维度

float16/float/int32/int64

ND

输入tensor2。

输出

参数

维度

数据类型

格式

描述

dst

[dim_0,dim_1,...,dim_n]

float16/float/int32/int64

ND

输出tensor。

注:输出dst与同名输入指向同一地址,即进行原地修改。

规格约束

接口调用示例

输入:
starts = {1,2}
ends = {4,4}
strides = {1,1}
dst=[[ 14,  -2,   2, -10, -12],
     [-11,   3,   2, -18,   6],
     [  1, -18, -12,   9,  -6],
     [ 16, -11,   6,  -6,   3],
     [ 12,  18,  14,  10,   9]]
src=[[  1,   0],
     [ -4,   7],
     [  9, -18]]
输出:
dst=[[ 14,  -2,   2, -10, -12],
     [-11,   3,   1,   0,   6],
     [  1, -18,  -4,   7,  -6],
     [ 16, -11,   9, -18,   3],
     [ 12,  18,  14,  10,   9]]