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