Сравните две матрицы разного размера

У меня есть две матрицы A (10,5) и B (30,5). Для сравнения, требуемый конечный результат — это логический массив размером (10,30) или (30,10). Мой код:

A=rand(10,5)
B=rand(30,5)
for i=1:size(A,1)
      X(:,i)=all(bsxfun(@le,A(i,:),B))
end

В моем коде я не получаю желаемого результата с точки зрения размера выходной матрицы.


person user9003011    schedule 08.02.2018    source источник
comment
Определите желаемый результат и чем он отличается от того, что есть сейчас? Если вы уменьшите свой пример (скажем, 6 на 3 или около того), вы можете предоставить образец ввода и вывода, чтобы дать нам понять, чего вы пытаетесь достичь и где что-то идет не так.   -  person Adriaan    schedule 08.02.2018


Ответы (1)


Это то, что вы хотите?

X = all(bsxfun(@le, permute(A, [1 3 2]), permute(B, [3 1 2])), 3);

Используя приведенный выше код, X(m,n) будет true, если каждая запись в A(m,:) меньше или равна соответствующей записи в B(n,:).

person Luis Mendo    schedule 08.02.2018
comment
Спасибо, не могли бы вы объяснить, как перестановка A, B работает вместе. - person user9003011; 08.02.2018
comment
У меня есть дополнительный, но похожий вопрос. Минимальное евклидово расстояние каждой строки в A относительно все строки в B должны быть найдены. Как это можно сделать с помощью bsxfun и permute. На выходе будет вектор-столбец X (10x1). X=min(bsxfun(@minus, перестановка(A, [1 3 2]), перестановка(B, [3 1 2])).^2, 3). Пожалуйста, предложите модификацию. - person user9003011; 10.02.2018
comment
@ user9003011 Я думаю, вам не хватает только sum в третьем измерении для вычисления расстояния; а затем минимизировать по второму. Попробуйте X = min(sum(bsxfun(@minus, permute(A, [1 3 2]), permute(B, [3 1 2])).^2, 3), [], 2). Кроме того, вы можете использовать X = min(pdist2(A, B), [], 2).^2 - person Luis Mendo; 10.02.2018