静态图语法——运算符
算术运算符和赋值运算符支持Number和Tensor运算,也支持不同dtype的Tensor运算。
单目算术运算符
单目算术运算符 |
支持类型 |
|---|---|
|
|
|
|
|
|
说明:
在Python中
~操作符对输入的整数按位取反; MindSpore对~的功能重新定义为对Tensor(Bool)的逻辑取反。
二元算术运算符
二元算术运算符 |
支持类型 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
限制:
当左右操作数都为
Number类型时,不支持Float64和Int32间的运算。+、-、*、/、%、**、//支持左右操作数的值同时为Bool。当任一操作数为
Tensor类型时,左右操作数的值不可同时为Bool。List/Tuple和Number进行*运算时表示将List/Tuple复制Number份后串联起来,List内的数据类型可以是图模式下支持的任意数据类型,也支持多层嵌套。Tuple内的数据类型必须为Number、String、None,也支持多层嵌套。
赋值运算符
赋值运算符 |
支持类型 |
|---|---|
|
MindSpore支持的Python内置数据类型和MindSpore自定义数据类型 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
限制:
当
AugAssign的左右操作数都为Number类型时,Number的值不可为Bool类型。当
AugAssign的左右操作数都为Number类型时,不支持Float64和Int32间的运算。当
AugAssign的任一操作数为Tensor类型时,左右操作数的值不可同时为Bool。List/Tuple和Number进行*=运算时表示将List/Tuple复制Number份后串联起来,List/Tuple内对象的元素可以包含任意图模式支持的类型,也支持多层嵌套。
逻辑运算符
逻辑运算符 |
支持类型 |
|---|---|
|
|
|
|
|
|
限制:
and、or的左操作数必须要能被转换成布尔值。例如:左操作数不能为存在多个元素的Tensor。当and、or的左操作数是变量Tensor时,右操作数必须也是同类型Tensor且Tensor成员个数只能有一个。在其余情况下,右操作数无要求。
比较运算符
比较运算符 |
支持类型 |
|---|---|
|
|
|
与 |
|
仅支持判断是 |
|
仅支持判断不是 |
< |
|
<= |
|
> |
|
>= |
|
!= |
|
== |
|
限制:
对于
<、<=、>、>=、!=来说,当左右操作数都为Number类型时,Number的值不可为Bool类型。对于
<、<=、>、>=、!=、==来说,当左右操作数都为Number类型时,不支持Float64和Int32间的运算。对于
<、<=、>、>=、!=、==来说,当左右任一操作数为Tensor类型时,左右操作数的值不可同时为Bool。对于
==来说,当左右操作数都为Number类型时,支持左右操作数同时为Bool,不支持只有一个操作数为Bool。对于
!=、==来说除mstype外,其他取值均可和None进行比较来判空。不支持链式比较,如:
a>b>c。