How to multiply a matrix to another cell matrix

조회 수: 34 (최근 30일)
Pooneh Shah Malekpoor
Pooneh Shah Malekpoor 2021년 5월 14일
편집: Stephen23 2021년 5월 14일
Hello
I have a 3*3 matrix such as
[1 0 0;
8 23 1;
5 7 10]
On the other hand, I have matrix 2000*1 containing 2000 cell arrays which are 3*4 matrices such as
[ [3*4];
[3*4];
[3*4];
.
.
]
I want to multiplythis 3*3 matrix to each of 3*4 matrices in the big matrix and obtain a final 2000*1 matrix. I have seen the code @(x)x.*matrix in MATLAB forum.
However, it gives out a function handle..I need to use the numeric output. What should i do?
  댓글 수: 1
David Hill
David Hill 2021년 5월 14일
You need to explain more. How are you getting a 2000x1 matrix? What do you mean when you say multiply? 3x3 * 3x4 = 3x4 matrix, you cannot perform element-wise multiplication on different sized matrices.

댓글을 달려면 로그인하십시오.

채택된 답변

Stephan
Stephan 2021년 5월 14일
편집: Stephan 2021년 5월 14일
Use cellfun:
A = magic(3)
A = 3×3
8 1 6 3 5 7 4 9 2
C = {rand(3,4); rand(3,4); rand(3,4); rand(3,4); rand(3,4)}
C = 5×1 cell array
{3×4 double} {3×4 double} {3×4 double} {3×4 double} {3×4 double}
result = cellfun(@(x)mtimes(A,x),C,'UniformOutput',false)
result = 5×1 cell array
{3×4 double} {3×4 double} {3×4 double} {3×4 double} {3×4 double}
C{1}
ans = 3×4
0.7660 0.7423 0.4707 0.8602 0.4490 0.2799 0.8553 0.2608 0.4265 0.9783 0.5613 0.8271
result{1}
ans = 3×4
9.1360 12.0880 7.9885 12.1046 7.5281 10.4742 9.6180 9.6741 7.9578 7.4446 10.7034 7.4423
  댓글 수: 3
Pooneh Shah Malekpoor
Pooneh Shah Malekpoor 2021년 5월 14일
BTW, Is there any faster approach?
Stephen23
Stephen23 2021년 5월 14일
"Is there any faster approach?"
Use a loop (with preallocation).

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Jan
Jan 2021년 5월 14일
편집: Jan 2021년 5월 14일
Create a simple loop:
A = rand(3, 3);
for iC = 1:numel(C) % Where C is your cell
C{iC} = A * C{iC};
end
The approach with cellfun looks smart, but it is slower:
C = cellfun(@(c) A*c, C, 'UniformOutput', false);
By the way, .* is the elementwise operation. You need *, because the matrix and the cell elements do not have the same number of elements.
  댓글 수: 2
Stephan
Stephan 2021년 5월 14일
@Jan will this be faster than cellfun for a big number of operations?
Stephen23
Stephen23 2021년 5월 14일
편집: Stephen23 2021년 5월 14일
"will this be faster than cellfun for a big number of operations? "
Yes.
Try it.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by