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

时间:2019-06-01 21:29:57

标签: octave distance-matrix

我正在尝试创建与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必须为有效尺寸

1 个答案:

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

话虽如此,但是您对minmax的使用是错误的。我不太确定您要实现什么目标,但实际上min(和max)只能以min(X, [], DIM)的形式使用,该形式决定要沿哪个维度获得最小值矩阵Xmin(X, Y)返回一个新矩阵,每个位置的X或Y最小值最小。您实际上以min的身分呼叫min(X, Y, Z),但这不是min的有效通话。