我想知道什么是更好的风格/更高效:
x = linspace(-1, 1, 100);
或
x = -1:0.01:1;
答案 0 :(得分:16)
正如Oli Charlesworth所提到的,在linspace
中,您将时间间隔[a,b]
划分为N
个点,而使用:
形式时,您从a
中走出}具有指定的步长(默认为1),直到达到b
。
要记住的一件事是,linspace
总是包含终点,而:
表单将包含第二个终点,仅当您的步长时如果它在最后一步落在它上面,它就会落空。例如:
0:3:10
ans =
0 3 6 9
那就是说,当我使用这两种方法取决于我需要做什么。如果我需要做的就是采样一个具有固定点数的间隔(我不关心步长),我使用linspace
。
在很多情况下,我不在乎它是否落在最后一点,例如,在使用极坐标时,我不需要最后一点,因为2*pi
是与0
相同。在那里,我使用0:0.01:2*pi
。
答案 1 :(得分:11)
与往常一样,使用最适合您的目的,最能表达您的意图。因此,当您知道点数时,请使用linspace
;知道间距时使用:
。
[顺便提一下,你的两个例子并不等同;第二个会给你201分。]
答案 2 :(得分:6)
As Oli already pointed out,当您知道所需要的数字时,通常最容易使用linspace
,当您知道间距时colon operator 你想要的元素。
但是,应该注意的是,这两者通常不会给你完全相同的结果。如上所述here和here,这两种方法使用稍微不同的方法来计算向量元素(这里是how the colon operator works的存档描述)。这就是为什么这两个向量不相等的原因:
>> 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
这是floating-point numbers are represented的典型副作用。某些数字不能完全表示(如0.1),并且以不同方式执行相同的计算(即更改数学运算的顺序)会导致结果略有不同,如上所示例。这些差异通常在order of the floating-point precision上,通常可以忽略,但您应该始终意识到它们存在。