Multiplication of 2 3d matrices
1 view (last 30 days)
Show older comments
Hi,
I have got 2 3d matrices: NormClassRetPf(dates,factors,classes) and TotWeightsPf(dates,factors,classes).
nDates=51
nFactors=19
nClasses=10
For each date I would like first to multiply (element wise) the first, second, third until nFactors rows of NormClassRetPf withTotWeightsPf and then sum the element wise multiplication. At the end I should get a 2-d matrix FactorRetPf(dates,factors) or FactorRetPf(factors,dates).
I tried this code:
for d=1:nDates
FactorRetPf(:,d)=nansum(TotWeightsPf(d,:,:).*NormClassRetPf(d,:,:));
FactorRetBM(:,d)=nansum(TotWeightsBM(d,:,:).*NormClassRetBM(d,:,:));
end
Do you know a more elegant way of doing this?
2 Comments
Jan
on 14 May 2019
It is correct that the wanted outputs FactorRetPf(dates,factors) and FactorRetPf(factors,dates) have the indices in different order?
Answers (2)
Andrei Bobrov
on 14 May 2019
Edited: Andrei Bobrov
on 14 May 2019
FactorRetPf = nansum(TotWeightsPf.*NormClassRetPf,3)';
FactorRetBM = nansum(TotWeightsBM.*NormClassRetBM,3)';
Jan
on 14 May 2019
FactorRetPf = permute(nansum(TotWeightsPf .* NormClassRetPf, 2), [3,1,2]);
FactorRetBM = permute(nansum(TotWeightsBM .* NormClassRetBM, 2), [3,1,2]);
2 Comments
Jan
on 14 May 2019
Edited: Jan
on 14 May 2019
The details in the question and in the code you have posted are confusing. But you can simply try it by your own.
- Multiply the arrays
- Create the sum over the wanted dimension
- Apply permute, transpose or reshape to ge the wanted output, if needed.
Maybe all you want to do is:
nansum(TotWeightsPf .* NormClassRetPf, 3)
If not adjust the parameters in:
FactorRetPf = permute(nansum(TotWeightsPf .* NormClassRetPf, 2), [3,1,2]);
% ^ ^ ^ ^
See Also
Categories
Find more on Creating and Concatenating Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!