这不仅仅是可用性。尽管文档说:
The linspace
函数生成线性间隔的向量。这是
与冒号运算符 : 类似,但可以直接控制
点数。
是一样的,主要区别和优点linspace
是它生成一个向量integers具有所需的长度(或默认 100)并对其进行缩放然后到所需的范围。这:
冒号直接通过增量创建向量。
假设您需要定义直方图的 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
does.
嗯,这基本上是一个浮点问题。哪个can避免被linspace
, as a single整数除法并不像浮点数的累加和那么微妙。但正如马克·迪金森在评论中指出的那样:您不应依赖任何计算值是否完全符合您的预期。这不是 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
和结肠在完成不同的任务时都很可靠。linspace
试图确保(顾名思义)线性间距,而colon
试图确保对称性
在您的特殊情况下,当您创建整数向量时,有no的优点linspace
(除了可用性 https://stackoverflow.com/a/26292855/2605073),但是当涉及浮点精细任务时,可能是这样。
山姆·罗伯茨的回答 https://stackoverflow.com/a/26297279/2605073提供了一些附加信息并澄清了更多事情,包括 MathWorks 的一些声明关于冒号运算符 http://www.mathworks.co.uk/matlabcentral/answers/143255-how-does-the-colon-operator-work.