我想知道什么是更好的风格/更高效:
x = linspace(-1, 1, 100);
Run Code Online (Sandbox Code Playgroud)
要么
x = -1:0.01:1;
Run Code Online (Sandbox Code Playgroud)
abc*_*bcd 17
正如奥利查尔斯沃思所提到的那样,在linspace你将间隔划分[a,b]为N点,而对于:表格,你从a指定的步长(默认为1)逐步走出直到你到达b.
要记住的一件事是linspace 始终包含终点,而:形式将包括第二个终点,只有当你的步长在最后一步它落在它上面时,它才会落空.例:
0:3:10
ans =
0 3 6 9
Run Code Online (Sandbox Code Playgroud)
也就是说,当我使用这两种方法取决于我需要做什么.如果我需要做的就是采样一个具有固定点数的间隔(我不关心步长),我使用linspace.
在许多情况下,我不在乎它是否落在最后一点上,例如,当使用极坐标时,我不需要最后一点,就像2*pi它一样0.在那里,我用0:0.01:2*pi.
Oli*_*rth 12
与往常一样,使用最适合您的目的,最能表达您的意图.所以linspace当你知道点数时使用; :当你知道间距时使用.
[顺便提一下,你的两个例子并不等同; 第二个会给你201分.]
由于奥利奇已经指出的那样,它通常是最容易使用的linspace,当你知道了数点你想和冒号运算符的时候,你知道间距你想要的元素之间.
但是,应该注意的是,这两者往往不会给你完全相同的结果.如此处和此处所述,这两种方法使用稍微不同的方法来计算向量元素(这里是冒号运算符如何工作的存档描述).这就是为什么这两个向量不相等的原因:
>> a = 0:0.1:1;
>> b = linspace(0,1,11);
>> a-b
ans =
1.0e-016 *
Columns 1 through 8
0 0 0 0.5551 0 0 0 0
Columns 9 through 11
0 0 0
Run Code Online (Sandbox Code Playgroud)
这是浮点数表示方式的典型副作用.某些数字无法准确表示(如0.1),并且以不同方式执行相同的计算(即更改数学运算的顺序)可能会导致结果略有不同,如上例所示.这些差异通常是浮点精度的顺序,通常可以忽略,但您应该始终意识到它们存在.