Как сравнить элементы в векторе с другим вектором

#matlab #vectorization

#matlab #векторизация

Вопрос:

У меня есть 2 вектора:

 a = [1, 2, 3];
b = [1.5 2.5 3.5];
 

Я хочу получить следующее

 [sum(a(1) < b), sum(a(2) < b), sum(a(3) < b)]

%  3   2   1
 

Есть ли способ сделать это без использования arrayfun или for цикла?

Я использую MATLAB R2014b.

Ответ №1:

Вы можете использовать bsxfun для применения операции к каждому элементу в a по отношению к каждому элементу b в. Операция будет @lt (меньше). Затем мы можем суммировать столбцы, чтобы подсчитать, сколько значений в b было больше, чем каждое значение в a .

 sum(bsxfun(@lt, a, b.'), 1)
 

В более новых версиях MATLAB (R2016b и новее) вы можете опустить bsxfun и выполнить следующее

 sum(a < b.', 1)
 

Комментарии:

1. спасибо, я должен был заметить use sum после использования bsxfun