我想知道什么是更好的风格/更有效率:
x = linspace(-1, 1, 100);或
x = -1:0.01:1;发布于 2011-04-25 22:38:42
正如Oli Charlesworth提到的,在linspace中,您将interval [a,b]划分为N点,而在:表单中,您使用指定的步长(默认值为1)从a中逐步退出,直到到达b。
要记住的一件事是,linspace总是包含端点,而:表单将包含第二个端点,只有当您的步长在最后一步落在它上面时,它才会落在它上面,否则它将达不到要求。示例:
0:3:10
ans =
0 3 6 9也就是说,我何时使用这两种方法取决于我需要做什么。如果我所需要做的就是用固定数量的点对一个区间进行采样(并且我不关心步长),我会使用linspace。
在许多情况下,我并不关心它是否落在最后一个点上,例如,当使用极坐标时,我不需要最后一个点,因为2*pi和0是一样的。在这里,我使用了0:0.01:2*pi。
发布于 2011-04-25 22:22:42
像往常一样,使用最适合你的目的的,并且最能表达你的意图的。因此,当您知道点数时,请使用linspace;当您知道间距时,请使用:。
顺便说一句,你的两个例子并不等价;第二个例子会给你201分。
发布于 2011-04-25 22:37:18
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这是how floating-point numbers are represented的典型副作用。某些数字无法精确表示(如0.1),以不同的方式执行相同的计算(即更改数学运算的顺序)可能会导致结果略有不同,如上面的示例所示。这些差异通常在order of the floating-point precision上,通常可以忽略,但您应该始终意识到它们的存在。
https://stackoverflow.com/questions/5779270
复制相似问题