如何修复 jaccard 距离中的 DIM 错误?

How to fix DIM error in jaccard distance?

我正在尝试从 Y 创建 Jaccard 距离。我不知道我正在编码的内容是否正确。我收到了有关 DIM 的错误消息……我已经在互联网上查看过,但我无法弄清楚。也许我的代码总共是错误的

Y=[1,0; 1,1; 1,0]
m = 1 - [(sum(min((Y-Y(1, :)), (Y-Y(2, :)), (Y-Y(3, :))), 3))/(sum(max(Y-Y(1, :)), (Y-Y(2, :)), (Y-Y(3, :)), 3))]

我期待一个 3x3 矩阵,但我收到一个错误

错误:最小值:DIM 必须是有效尺寸

我不清楚你在这里试图做什么(Jaccard 距离需要两个输入,不清楚你的输入是什么),但无论如何你在这里有语法错误。

首先,您的 'max' 函数中有不平衡的括号(大概应该是 max((Y-Y(1,:)), ... 而不是 max(Y-Y(1,:)) (注意单个左括号),它结束了函数调用。事实上,你使用了很多多余的括号和糟糕的缩进/间距样式,这使得发现这些变得更加困难。例如,更好的写法(纯粹是视觉上的)可能是:

m = 1 - [ sum( min( Y - Y(1,:),         ...
                    Y - Y(2,:),         ...
                    Y - Y(3,:) ), 3 )   ...
          /                             ...
          sum( max( Y - Y(1,:),         ...
                    Y - Y(2,:),         ...
                    Y - Y(3,:) ), 3 )   ...
        ];

或者,更好的是,将中间结果捕获到有意义命名的中间变量中,以便您的代码读起来像英语并且更容易理解和调试,即

VectorOfMinima = min( Y - Y(1,:), Y - Y(2,:), Y - Y(3,:) );
VectorOfMaxima = max( Y - Y(1,:), Y - Y(2,:), Y - Y(3,:) );

SumOfMinima = sum( VectorOfMinima, 3);
SumOfMaxima = sum( VectorOfMaxima, 3);

Jaccard = 1 - ( SumOfMinima / SumOfMaxima );

话虽如此,但您对 minmax 的使用是错误的。我不太确定你想要实现什么,但实际上 min (和 max 分别)只能以 min(X, [], DIM) 的形式使用,它确定沿哪个维度获得最小值矩阵 Xmin(X, Y) 其中 returns 一个新矩阵,每个位置的 X 或 Y 中的最小值。您有效地将 min 调用为 min(X, Y, Z),这不是 min.

的有效调用