Расчет максимального расстояния между элементами вектора в MATLAB - PullRequest
3 голосов
/ 16 марта 2010

Давайте предположим, что у нас есть такой вектор, как

x = -1:0.05:1;
ids = randperm(length(x));
x = x(ids(1:20));

Я бы хотел рассчитать максимальное расстояние между элементами x каким-то идиоматическим способом. Было бы легко просто перебрать все возможные комбинации элементов x, но я чувствую, что мог бы быть способ сделать это с помощью встроенных функций MATLAB каким-то сумасшедшим, но идиоматическим способом.

Ответы [ 4 ]

7 голосов
/ 16 марта 2010

А как же

max_dist = max(x) - min(x)

2 голосов
/ 16 марта 2010

Это вычисление расстояния между точками, хотя и простое, поскольку вы работаете в одном измерении. Действительно, та точка, которая находится на максимальном расстоянии в одном измерении, всегда является одной из двух возможных точек. Так что все, что вам нужно сделать, это взять минимальное значение и максимальное значение из списка, и посмотреть, что находится дальше от рассматриваемого вопроса. Таким образом, предполагая, что числа в x являются действительными числами, это будет работать:

xmin = min(x);
xmax = max(x);
maxdistance = max(x - xmin,xmax - x);

В качестве альтернативы, некоторое время назад я установил общий инструмент для вычисления расстояния между точками на файловом обмене (IPDM) . Он достаточно умен, чтобы в особом случае решать простые задачи, такие как задача 1-й дальней точки. Этот звонок сделает это за вас:

D = ipdm(x,'subset','farthest','result','struct');

Конечно, он не будет столь же эффективным, как простой код, который я написал выше, поскольку это полностью общий инструмент.

2 голосов
/ 16 марта 2010

Вы имеете в виду разницу между самым большим и самым маленьким элементами в вашем векторе? Если вы это сделаете, то что-то вроде этого будет работать:

max(x) - min(x)

Если нет, то я неправильно понял вопрос.

1 голос
/ 16 марта 2010

Э-э-э ... хотелось бы иметь MATLAB в моих руках, и все еще рано утром, но что-то вроде:

max_dist = max(x(2:end) - x(1:end-1));

Не знаю, ищите ли вы это.

...