如何使 pdist 忽略一个值(Matlab)

Posted

技术标签:

【中文标题】如何使 pdist 忽略一个值(Matlab)【英文标题】:How to make pdist ignore a value (Matlab) 【发布时间】:2012-03-27 06:52:47 【问题描述】:

我正在使用pdist 计算三维点之间的欧几里得距离(在 Matlab 中)。但是,我有一些坐标无法从矩阵中删除,但我希望 pdist 忽略。

我尝试用NaN 覆盖我想忽略的值,但pdist 仍然在计算中使用它们。有没有办法让 pdist 在它的过程中忽略一个值?

【问题讨论】:

【参考方案1】:

我不知道pdist,但您似乎需要删除某些行才能使其按您想要的方式工作。如果要查找不需要的行的索引,可以执行以下操作:

d = [1,2,3;2,3,4;3,4,5]
d =
    1   2   3
    2   3   4
    4   5   6
i = [1 3]
d(i,:)
    1   2   3
    4   5   6
id = pdist(d(i,:)) % assume id=2
real_index = i(id) % now the real index is i(2)=3

现在您将拥有real_index 中的行索引。 (我的matlab中似乎不存在pdist,所以我无法获得真正的输出,但想法就在那里!)

【讨论】:

我知道,但删除行不是我想要的(这会改变索引,这是我最终需要的)。我需要一种方法让pdist 忽略值,而不必删除实际数据。 它不会改变变量本身——它只是将一个不带行的匿名变量传递给 pdist(即 pdist(d(i,:)) )。 d 将保持不变。 是的,但它会改变pdist 的输入(以及输出)。假设我有一个矩阵d,第二行的距离最小。删除第一行后,pdist 将返回1 作为距离最小的行的索引(d 是错误的)。 哦,好的。我没有意识到 pdist 的输出依赖于此。使用 pdist 的输出作为 i 的索引来取回原始行怎么样?那行得通吗?我修改了答案以反映这一点。 这是个好主意,有点像使用find 你的意思吗?我试试看!

以上是关于如何使 pdist 忽略一个值(Matlab)的主要内容,如果未能解决你的问题,请参考以下文章

如何优雅地忽略 MATLAB 函数的某些返回值

MATLAB中dist与pdistpdist2的区别与联系

MATLAB中dist与pdistpdist2的区别与联系

压缩距离矩阵如何工作? (pdist)

scipy.pdist() 返回 NaN 值

matlab中如何用代码表示两个数之间的街区(曼哈顿)距离