我不清楚您在这里尝试做什么(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
and的使用max
是错误的。我不太确定你想要实现什么,但有效min
(和max
分别)只能以min(X, [], DIM)
确定沿哪个维度获得矩阵最小值的形式使用X
,或者min(X, Y)
返回一个具有最小值的新矩阵 X或 Y 在每个位置。您实际上是在调用min
as min(X, Y, Z)
which 不是对min
.