Scatter¶
Scatter - 11¶
版本¶
名称: Scatter (GitHub)
域:
main
自版本:
11
函数:
False
支持级别:
SupportType.COMMON
形状推断:
True
此版本的操作符已 **自版本 11 起弃用**。
摘要¶
此操作符已弃用。请使用 ScatterElements,它提供相同的功能。
Scatter 接受三个输入 data
、updates
和 indices
,它们具有相同的秩 r >= 1,以及一个可选的属性 axis,它标识 data
的一个轴(默认情况下,最外层的轴,即轴 0)。操作的结果是通过创建输入 data
的副本,然后将它的值更新为由 updates
指定的值,这些值位于由 indices
指定的特定索引位置。它的输出形状与 data
的形状相同。
对于 updates
中的每个条目,data
中的目标索引是通过将 indices
中的对应条目与条目本身的索引结合来获得的:维度 = axis 的索引值是从 indices
中对应条目的值中获得的,而维度 != axis 的索引值是从条目本身的索引中获得的。
例如,在 2-D 张量情况下,对应于 [i][j] 条目的更新如下执行
output[indices[i][j]][j] = updates[i][j] if axis = 0,
output[i][indices[i][j]] = updates[i][j] if axis = 1,
此操作符是 GatherElements 的逆操作。它类似于 Torch 的 Scatter 操作。
示例 1
data = [
[0.0, 0.0, 0.0],
[0.0, 0.0, 0.0],
[0.0, 0.0, 0.0],
]
indices = [
[1, 0, 2],
[0, 2, 1],
]
updates = [
[1.0, 1.1, 1.2],
[2.0, 2.1, 2.2],
]
output = [
[2.0, 1.1, 0.0]
[1.0, 0.0, 2.2]
[0.0, 2.1, 1.2]
]
示例 2
data = [[1.0, 2.0, 3.0, 4.0, 5.0]]
indices = [[1, 3]]
updates = [[1.1, 2.1]]
axis = 1
output = [[1.0, 1.1, 3.0, 2.1, 5.0]]
属性¶
axis - INT (默认值为
'0'
)要在其上进行散射的轴。负值表示从后部计算维度。接受的范围是 [-r, r-1],其中 r = rank(data)。
输入¶
data (异构) - T
秩为 r >= 1 的张量。
indices (异构) - Tind
int32/int64 索引张量,秩为 r >= 1(与输入具有相同的秩)。所有索引值都应在轴上 [-s, s-1] 的范围内,该轴的大小为 s。如果任何索引值超出范围,则会发生错误。
updates (异构) - T
秩为 r >=1 的张量(与索引具有相同的秩和形状)
输出¶
output (异构) - T
秩为 r >= 1 的张量(与输入具有相同的秩)。
类型约束¶
T in (
tensor(bool)
,tensor(complex128)
,tensor(complex64)
,tensor(double)
,tensor(float)
,tensor(float16)
,tensor(int16)
,tensor(int32)
,tensor(int64)
,tensor(int8)
,tensor(string)
,tensor(uint16)
,tensor(uint32)
,tensor(uint64)
,tensor(uint8)
)输入和输出类型可以是任何张量类型。
Tind in (
tensor(int32)
,tensor(int64)
)将索引限制为整数类型
Scatter - 9¶
版本¶
名称: Scatter (GitHub)
域:
main
自版本:
9
函数:
False
支持级别:
SupportType.COMMON
形状推断:
True
此版本的操作符已 **自版本 9 起可用**。
摘要¶
给定秩 r >= 1 的输入张量 data
、updates
和 indices
,将 updates
提供的值写入第一个输入 data
,沿着 data
的 axis
维度(默认情况下为最外层维度,即 axis=0),对应于 indices
。对于 updates
中的每个条目,data
中的目标索引由 indices
中的对应条目(对于维度 = axis)和源中的索引(对于维度 != axis)指定。例如,在二维张量情况下,如果 axis = 0,则 data[indices[i][j]][j] = updates[i][j],或如果 axis = 1,则 data[i][indices[i][j]] = updates[i][j],其中 i 和 j 是从 0 开始到 updates
中各自大小 - 1 的循环计数器。示例 1:data = [ [0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0], ] indices = [ [1, 0, 2], [0, 2, 1], ] updates = [ [1.0, 1.1, 1.2], [2.0, 2.1, 2.2], ] output = [ [2.0, 1.1, 0.0] [1.0, 0.0, 2.2] [0.0, 2.1, 1.2] ] 示例 2:data = [[1.0, 2.0, 3.0, 4.0, 5.0]] indices = [[1, 3]] updates = [[1.1, 2.1]] axis = 1 output = [[1.0, 1.1, 3.0, 2.1, 5.0]]
属性¶
axis - INT (默认值为
'0'
)要散布的轴。负值表示从后面计算维度。接受范围是 [-r, r-1]
输入¶
data (异构) - T
秩为 r >= 1 的张量。
indices (异构) - Tind
秩 r >= 1 的 int32/int64 索引张量(与输入的秩相同)。
updates (异构) - T
秩为 r >=1 的张量(与索引具有相同的秩和形状)
输出¶
output (异构) - T
秩为 r >= 1 的张量(与输入具有相同的秩)。
类型约束¶
T in (
tensor(bool)
,tensor(complex128)
,tensor(complex64)
,tensor(double)
,tensor(float)
,tensor(float16)
,tensor(int16)
,tensor(int32)
,tensor(int64)
,tensor(int8)
,tensor(string)
,tensor(uint16)
,tensor(uint32)
,tensor(uint64)
,tensor(uint8)
)输入和输出类型可以是任何张量类型。
Tind in (
tensor(int32)
,tensor(int64)
)将索引限制为整数类型