Как исправить ошибку DIM на расстоянии jaccard? - PullRequest
0 голосов
/ 02 июня 2019

Я пытаюсь создать расстояние Жакара от Y. Я не знаю, даже если правильно, что я кодирую. Я получил сообщение об ошибке о 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 голосов
/ 03 июня 2019

Мне непонятно, как вы пытаетесь сделать это здесь (расстояние Джакарта требует двух входов, неясно, каковы ваши входные данные), но в любом случае у вас здесь есть синтаксические ошибки.

Для начала, у вас есть несбалансированные скобки в вашей функции '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. Я не совсем уверен, чего вы хотите достичь, но эффективно minmax соответственно) можно использовать только в форме min(X, [], DIM), которая определяет, по какому измерению получать минимумы для матрицы X, или min(X, Y), который возвращает новую матрицу с минимумом X или Y в каждой позиции. Вы фактически звоните min как min(X, Y, Z), что не является допустимым вызовом для min.

...