为什么要使用“ clamp”,“ clamp。”和“ clamp!”?在朱莉娅?

时间:2018-08-23 13:52:53

标签: julia

Julia有two methods for limiting variables to ranges of numbersclampclamp!。使用点符号时,clamp.也可以用于相同的功能。

clamp将标量限制为由两个值定义的间隔。

clamp.在数组上逐个元素地操作以将每个值限制为该间隔。它也可以用于不在数组中的整数和浮点数。

clamp!对整个数组进行操作,以将每个值限制为间隔。

为什么要使用三个功能来做同一件事?当clamp!同时处理标量和数组时,是否有任何理由使用clampclamp.

1 个答案:

答案 0 :(得分:5)

实际上,您有两个功能clampclamp!

函数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)

clamp!(x, lo, hi)

如果lohi是标量,因为它们都修改了x.=分配告诉Julia对其进行了修改)。

编辑:

clamp.clamp!之间的另一个重要区别(自然是clamp!就位的结果)是广播clamp的作用是不变的,例如clamp.(0:0.1:1, 0.25, 0.75)将起作用,而clamp!(0:0.1:1, 0.25, 0.75)将引发错误。