linspace比结肠有什么优势":"运营商?

时间:2014-10-10 05:47:21

标签: arrays matlab operators

写作有什么好处

t = linspace(0,20,21)

t = 0:1:20

我理解前者会产生一个矢量,就像第一个那样 任何人都可以说明linspacet = 0:1:20有用的情况吗?

3 个答案:

答案 0 :(得分:20)

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

  

linspace函数生成线性间隔矢量。它是   类似于冒号操作符:但是可以直接控制   点数。

它是相同的,linspace的主要区别和优势是它生成具有所需长度(或默认值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

一样。

嗯,它基本上是一个浮点问题。 linspace可以避免哪些可以,因为整数的除法并不那么精细,比如浮点数的累积和。但正如马克·狄金森在评论中指出的那样: 您不应该依赖任何计算值正是您所期望的。这不是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和冒号在执行不同任务时是可靠的。 linspace尝试确保(顾名思义)线性间距,而colon尝试确保对称性

在你的特殊情况下,当你创建一个整数向量时,linspace没有优势(除usability之外),但是当它涉及浮点时细腻的任务,可能有。

The answer of Sam Roberts提供了一些其他信息并澄清了更多内容,包括MathWorks regarding the colon operator的一些声明。

答案 1 :(得分:9)

linspace和冒号操作员做不同的事情。

linspace创建一个指定长度的整数向量,然后使用除法将其缩小到指定的区间。这样就可以确保输出向量尽可能线性间隔。

冒号运算符将增量添加到起点,并从终点减去减量以达到中间点。通过这种方式,它可以确保输出向量尽可能对称。

这两种方法因此有不同的目的,并且通常会给出非常不同的答案,例如

>> a = 0:pi/1000:10*pi;
>> b = linspace(0,10*pi,10001);
>> all(a==b)
ans =
     0
>> max(a-b)
ans =
   3.5527e-15

然而,在实践中,除非您对微小的数字细节感兴趣,否则差异往往影响不大。当容易表达间隙的数量时,我发现linspace更方便,而当增量容易表达时,我发现冒号运算符更方便。

有关冒号运算符背后算法的更多详细信息,请参阅此MathWorks technical note。有关linspace的更多详细信息,您只需输入edit linspace即可查看其确切内容。

答案 2 :(得分:7)

linspace在您知道所需的元素数量而不是"步骤"的大小时非常有用。它们之间。因此,如果我说在02*pi之间制作一个包含360个元素的向量作为一个人为的例子它将会是

linspace(0, 2*pi, 360)

或者如果您刚刚使用冒号操作符,则必须手动计算步长:

0:(2*pi - 0)/(360-1):2*pi

linspace更方便

对于简单的真实世界应用,请参阅此答案linspace有助于创建custom colour map