我正在尝试创建与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必须为有效尺寸
答案 0 :(得分:0)
我不清楚您要在这里做什么(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)
返回一个新矩阵,每个位置的X或Y最小值最小。您实际上以min
的身分呼叫min(X, Y, Z)
,但这不是min
的有效通话。