我们假设我们有一个像
这样的向量x = -1:0.05:1;
ids = randperm(length(x));
x = x(ids(1:20));
我想以某种惯用的方式计算x
元素之间的最大距离。迭代x
元素的所有可能组合会很容易,但我觉得有一种方法可以用一些疯狂但惯用的方式用MATLAB的内置函数来实现它。
答案 0 :(得分:7)
怎么样?
max_dist = max(x) - min(x)
答案 1 :(得分:2)
你的意思是矢量中最大和最小元素之间的差异?如果你这样做,那么这样的事情就可以了:
max(x) - min(x)
如果你不这样做,那我就误解了这个问题。
答案 2 :(得分:2)
这是一个点间距离计算,虽然很简单,因为你在一个维度上工作。实际上,在一个维度上落在最大距离处的点始终是两个可能点之一。所以你需要做的就是从列表中获取最小值和最大值,并查看哪个距离相关点更远。因此,假设x中的数字是实数,这将起作用:
xmin = min(x);
xmax = max(x);
maxdistance = max(x - xmin,xmax - x);
作为替代方案,前段时间我在文件交换(IPDM)上放置了一般的点间距离计算工具。对于像1维最远点问题这样的特殊情况简单问题,它足够聪明。这个电话会为你做这件事:
D = ipdm(x,'subset','farthest','result','struct');
当然,它不如我上面编写的简单代码那么高效,因为它是一个完全通用的工具。
答案 3 :(得分:1)
呃......我很想在我手上拿一个MATLAB,但仍然很早,但是这样的事情呢:
max_dist = max(x(2:end) - x(1:end-1));
我不知道这是否是您正在寻找的。 p>