Линспейс против диапазона - PullRequest
15 голосов
/ 25 апреля 2011

Мне было интересно, какой стиль лучше / эффективнее:

x = linspace(-1, 1, 100);

или

x = -1:0.01:1;

Ответы [ 3 ]

17 голосов
/ 25 апреля 2011

Как упоминал Оли Чарльзуорт, в 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.

12 голосов
/ 25 апреля 2011

Как всегда, используйте тот, который лучше всего соответствует вашим целям, и который наилучшим образом выражает ваши намерения. Так что используйте linspace, когда вы знаете количество очков; используйте :, когда вы знаете расстояние.

[Кстати, ваши два примера не эквивалентны; второй даст вам 201 очко.]

6 голосов
/ 25 апреля 2011

Как Оли уже указал , обычно проще всего использовать 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

Это типичный побочный эффект от представления чисел с плавающей запятой . Определенные числа не могут быть представлены точно (например, 0,1), и выполнение одного и того же вычисления различными способами (т. Е. Изменение порядка математических операций) может привести к очень немного отличающимся результатам, как показано в приведенном выше примере , Эти различия обычно имеют порядок точности с плавающей точкой , и их часто можно игнорировать, но вы всегда должны знать, что они существуют.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...