0

我正在尝试从 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 必须是有效尺寸

4

1 回答 1

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 );

说了这么多,但是您对minand的使用max是错误的。我不太确定你想要实现什么,但有效min(和max分别)只能以min(X, [], DIM)确定沿哪个维度获得矩阵最小值的形式使用X,或者min(X, Y)返回一个具有最小值的新矩阵 X或 Y 在每个位置。您实际上是在调用minas min(X, Y, Z)which 不是对min.

于 2019-06-03T15:53:14.270 回答