Linspace vs range

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

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

или

x = -1:0.01:1;

Ответы

Ответ 1

Как отметил Оли Чарлворт, в 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.

Ответ 2

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

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

Ответ 3

Как уже указывал Оли, обычно проще использовать 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) и выполнять одни и те же вычисления по-разному (т.е. Изменять порядок математических операций), что может привести к столь незначительным результатам, как показано в приведенном выше примере. Эти различия обычно находятся в порядке точности с плавающей точкой, и их часто можно игнорировать, но вы всегда должны знать, что они существуют.