Julia有两种方法可以将变量限制在数字范围内:clamp
和clamp!
。带有点符号,clamp.
也可以用于相同的功能。
clamp
将标量限制为由两个值定义的间隔。
clamp.
在数组上逐个元素地操作以将每个值限制为该间隔。它也适用于不在数组中的整数和浮点数。
clamp!
对整个数组进行运算以将每个值限制为间隔。
为什么要用三个功能来做同一件事?有什么理由使用clamp!
或clamp
,何时clamp.
将同时处理标量和数组?
实际上,您有两个功能clamp
和clamp!
。
函数clamp
仅接受所有参数的标量。因此,唯一可接受的用法是clamp(3, 4, 5)
。
函数clamp!
接受数组作为第一个参数,标量作为第二个和第三个参数。它修改了第一个参数。
呼叫clamp.(x, lo, hi)
是函数的广播应用clamp
。
这意味着clamp.(x, 4, 5)
将创建一个新的向量(大多数情况下-请参见下面的注释了解异常),同时clamp!(x, 4, 5)
会更新的内容x
。
另外,您可以编写类似例如的内容,clamp.([1,2,3], [3,1,6], [4,5,7])
并广播所有clamp!
不允许的参数。
最后,这两个表达式产生相同的结果:
x .= clamp.(x, lo, hi)
Run Code Online (Sandbox Code Playgroud)
和
clamp!(x, lo, hi)
Run Code Online (Sandbox Code Playgroud)
如果lo
和hi
都是标量,因为两者都修改x
到位(.=
赋值告诉Julia修改它到位)。
编辑:
clamp.
和之间clamp!
(作为clamp!
适当的自然结果)之间的另一个重要区别是,广播clamp
在不可变的论点上起作用,例如clamp.(0:0.1:1, 0.25, 0.75)
将起作用,而clamp!(0:0.1:1, 0.25, 0.75)
引发错误。