#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