使用“地图代数”中的运算符

需要 Spatial Analyst 许可。

获得 Image Analyst 许可后可用。

在“地图代数”中,运算符对输入栅格和数字应用数学运算。

通常将运算符放置到两个输入(操作数)之间以执行一项数学运算(例如,outVar = 3 + 7)。在“地图代数”中,操作数可以是栅格或者数字。要对栅格使用运算符,栅格必须是 Raster object

下表提供了一份快速参考,指明了相对于 Python 运算符而言,如何实现最新的“地图代数”运算符。

操作Python 运算符地图代数运算符地理处理工具

算术

+

+

/

/

整除

//

//

N/A

求模

%

%

求模

*

*

**

**

-

-

一元减号

-

-

取反

一元加号

+

+

N/A

布尔

布尔与

N/A

&

布尔与

布尔求反

N/A

~

布尔非

布尔异或

N/A

^

布尔异或

布尔或

N/A

|

布尔或

关系

等于

==

==

等于

大于

>

>

大于

大于等于

>=

>=

大于等于

小于

<

<

小于

小于等于

<=

<=

小于等于

不等于

!=

!=

不等于

按位

按位与

&

N/A

按位与

按位补码

~

N/A

按位非

按位异或

^

N/A

按位异或

按位左移

<<

<<

按位左移

按位或

|

N/A

按位或

按位右移

>>

>>

按位右移

运算符规则

  • 只对数字使用运算符时,结果将为数字。
    # outVar will be assigned 10
    outVar = 3 + 7
  • 对栅格使用运算符时,栅格必须是 Raster 对象。
    outRas = Raster("inraster1") + Raster("inraster2")
  • 使用栅格操作数时,结果为 Raster 对象。
    # In the following statement, 4 is added to each cell value in inraster1
    outRas = Raster("inraster1") + 4
    outRas2 = Raster("inraster") + math.pi

    在以上语句中,使用的 pi 来自 Python math 模块。math 模块还包括以 math.e 为底的自然对数,它也可以用于“地图代数”语句中。

  • 一些运算符可以放到 Raster 对象或者数字前。
    outRas = -Raster("inraster")
  • 当一个或者多个输入(操作数)是栅格时,布尔(~&^||)运算符将执行布尔运算。如果两个输入(操作数)都是数字,则这些运算符将执行“按位”运算。

提示:

运算符之间可以不加空格,但是为了增加可读性,建议您加上空格。

工具和运算符可以嵌套以创建复杂的语句。

多维栅格运算符规则

  • 当运算符与多维栅格和数字一起使用时,结果将是所含变量和维数与输入相同的多维 Raster 对象。
    # In the following statement, 100 is added to each cell in 
    # each slice of in_multidem_raster
    out_multidem_raster = in_multidem_raster + 100
  • 当运算符与多维栅格和非多维栅格一起使用时,结果将是所含变量和维数与输入相同的多维 Raster 对象。

    如果输入 Raster 对象不重叠,则不会返回任何结果。

    # In the following statement, the cell values from in_raster are added to 
    # the cell values in each slice of in_multidem_raster.
    out_multidem_raster = in_multidem_raster + in_raster
  • 当运算符与两个多维栅格一起使用时,结果将是仅包含输入之间共用的变量和维数的多维 Raster 对象。例如,如果一个多维栅格包含 1995-2015 年的每日温度数据,而另一个多维栅格包含 2001-2005 年的每日温度数据,那么与这两个多维栅格一起使用的运算符的结果将仅包括 2001-2005 年的每日温度数据。

    如果输入多维 Raster 对象没有共用变量和维数,则不会返回任何结果。

    # In the following statement, the cell values in each slice from in_multidem_raster1
    # are added to the cell values in each slice from in_multidem_raster2, only where variables and 
    # dimensionality overlap.
    out_multidem_raster = in_multidem_raster1 + in_multidem_raster2

运算符优先级

优先级值确定运算符的执行顺序。首先处理优先级更高的运算符。如果两个运算符的优先级值相同,则按表达式中从左到右的顺序来处理它们。

可以使用括号限定优先级,不管指定的是什么运算符,总是首先处理最底层括号中的运算。

下表按优先级从低到高的顺序列出了所有“地图代数”运算符。同一行中的运算符具有相同的优先级。

地图代数运算符参考

<、<=、>、>=、==、!=

小于小于等于大于大于等于等于不等于

|

布尔或

^

布尔异或

&

布尔与

<<、>>

按位左移按位右移

+、-

*、/、//、%

整除

+、-、~

一元加号取反布尔非

**

相关主题