Как эффективно умножить каждые 2 столбца и суммировать строку

Может быть, я должен просто пойти с циклом for, но я хочу посмотреть, есть ли более эффективный / более быстрый способ сделать это.

У меня есть матрица чисел, скажем, 10х10. Я хочу умножить 1,1 на 1,2, затем 1,3 на 1,4 и т. Д., А затем суммировать эти результаты для строки 1. Затем перейдите к следующей строке и сделайте то же самое. Конечным результатом будет вектор 10.

Возможно, что эта матрица будет 1000x1000, поэтому я хочу, чтобы она была максимально быстрой. Спасибо!

1 ответ

Решение

Я хотел бы использовать

v = sum(M(:,1:2:end-1).*M(:,2:2:end),2);

Вот M(:,1:2:end-1).*M(:,2:2:end) выполняет умножение: каждый элемент нечетного столбца M умножается на соседа справа. (Это предполагает четное количество столбцов, в противном случае описанный вами процесс не определен.) Затем каждая строка складывается sum команда.

На моем компьютере выполнение этого для матрицы 1000 на 1000 занимает 0,04 секунды.

Другие вопросы по тегам