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