gpt4 book ai didi

arrays - linspace 相对于冒号 ":"运算符的优势是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 19:08:09 29 4
gpt4 key购买 nike

这样写有什么好处吗

t = linspace(0,20,21)

结束

t = 0:1:20

?

我理解前者产生一个向量,就像第一个一样。
谁能告诉我 linspacet = 0:1:20 上有用的情况?

最佳答案

不仅仅是可用性。虽然文档说:

The linspace function generates linearly spaced vectors. It is similar to the colon operator :, but gives direct control over the number of points.

它是相同的,linspace 的主要区别和优点是它生成一个具有所需长度(或默认 100)的整数 向量并缩放它< strong>之后到所需的范围。 : 冒号直接通过增量创建向量。

假设您需要为直方图定义 bin 边缘。特别是你需要特定的 bin 边缘 0.35 正好在正确的位置:

edges = [0.05:0.10:.55];
X = edges == 0.35

edges = 0.0500 0.1500 0.2500 0.3500 0.4500 0.5500
X = 0 0 0 0 0 0

没有定义右 bin 边缘,但是:

edges = linspace(0.05,0.55,6);   %// 6 = (0.55-0.05)/0.1+1
X = edges == 0.35

edges = 0.0500 0.1500 0.2500 0.3500 0.4500 0.5500
X = 0 0 0 1 0 0

确实如此。

嗯,这基本上是一个 float 问题。 linspace 可以避免,因为整数的除法并不那么精细,就像 float 的累加和。但正如 Mark Dickinson 在评论中指出的那样:您不应该依赖于任何计算值正是您所期望的。这不是 linspace 的用途。 在我看来,问题在于您遇到浮点问题的可能性有多大,您可以将这些问题的概率降低多少,或者您可以将容差设置为多小。使用linspace 可以降低这些问题发生的概率,它不是安全的。

这是linspace的代码:

n1 = n-1
c = (d2 - d1).*(n1-1) % opposite signs may cause overflow
if isinf(c)
y = d1 + (d2/n1).*(0:n1) - (d1/n1).*(0:n1)
else
y = d1 + (0:n1).*(d2 - d1)/n1
end

总结一下:linspace 和 colon 在执行不同的任务时是可靠的。 linspace 试图确保(顾名思义)线性间距,而 colon 试图确保对称性

在您的特殊情况下,当您创建一个整数向量时,linspace 没有优势(除了 usability ),但是当涉及到 float 时点精致的任务,还有可能。

The answer of Sam Roberts提供了一些附加信息并澄清了更多内容,包括 MathWorks 的一些陈述 regarding the colon operator .

关于arrays - linspace 相对于冒号 ":"运算符的优势是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26292695/

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