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