2015-12-13 3 views
1

Первый вектор (M) имеет 96 элементов, а второй (L) имеет 24. Первый - это информация в каждом 15mn, а вторая - информация каждый час. То, что я хочу, чтобы умножить первые четыре элемента в М с первым элементом в L, в конечном итоге только один вектор с 96 элементами, как так -Матричное умножение - Matlab

enter image description here

Есть простой способ сделать это не делает код слишком сложным?

+3

Если вы просто умножаете, у вас все еще есть 4 значения в час, так что именно вы хотите? – flawr

+0

Для этого примера чисел, какими будут первые два числа результата? Из вашего описания я ожидал бы выход из 96 элементов, как он накапливается до 24 элементов? – Daniel

+1

@ Даниэль Извините, моя ошибка, я имел в виду 96 элементов вывода – jonas345

ответ

0

Вы можете изменить массив,

a = [2,4,6,8]; 
b = 1:16; 
c = repmat(a,4,1); 
d = reshape(a,1,4*length(a)); 
e = b.*d; 

обратите внимание, что в случае, если вы хотите Oneliner они могут быть объединены

b.*reshape(repmat(a,4,1), 1, 4*length(a)); 

Я не могу сказать, является ли это быстрее, чем другие варианты, но это не должно быть очень большой разницы. Выберите это, если вы считаете, что он более всеобъемлющий.

4

Используя функцию kron вы можете легко создавать индексы для L, он создает [1,1,1,1,2, 2,2,2 ....]

L(kron(1:numel(L),ones(1,4))).*M 

В случае, если есть проблема, понимание kron, то же самое может быть достигнуто с помощью CEIL:

L(ceil([1:numel(M)]/4)).*M 
Смежные вопросы