gpt4 book ai didi

julia - 为什么 Julia 中有 "clamp"、 "clamp."和 "clamp!"?

转载 作者:行者123 更新时间:2023-12-05 00:59:51 29 4
gpt4 key购买 nike

Julia 有 two methods for limiting variables to ranges of numbers : clampclamp!。使用点表示法,clamp. 也可以用于相同的功能。

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

clamp. 对数组逐个元素进行操作,以将每个值限制在该区间内。它也适用于不在数组中的整数和 float 。

clamp! 对整个数组进行操作以将每个值限制在区间内。

为什么要用三个函数来做同样的事情?当 clamp. 将处理标量和数组时,是否有任何理由使用 clamp!clamp

最佳答案

其实你有两个函数clampclamp! .

功能 clamp只接受所有参数的标量。所以唯一被接受的用法是 clamp(3, 4, 5) .

功能 clamp!接受一个数组作为第一个参数,接受标量作为第二个和第三个参数。它修改了它的第一个参数。

调用 clamp.(x, lo, hi)是函数clamp 的广播应用程序.

这意味着 clamp.(x, 4, 5)将创建一个新向量(大多数情况下 - 请参阅下面的注释了解异常(exception)情况),而 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)抛出错误。

关于julia - 为什么 Julia 中有 "clamp"、 "clamp."和 "clamp!"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51987478/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com