What's the solution?

1 view (last 30 days)
Adi Nor
Adi Nor on 9 May 2017
Edited: Adi Nor on 9 May 2017
For example: If I have matrix A and Matrix B:
A =
7 4 1
4 5 6
3 6 9
>> B = zeros(4,4)
B =
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
I want I want element (3,2) from matrix B with size (4,4) to try the values of the first column from matrix A with size (3,3) one by one and at each time produce the new matrix. So, the output will be:
B =
0 0 0 0
0 0 7 0
0 0 0 0
0 0 0 0
B =
0 0 0 0
0 0 4 0
0 0 0 0
0 0 0 0
B =
0 0 0 0
0 0 3 0
0 0 0 0
0 0 0 0
How can I do this ?

Accepted Answer

Stephen23
Stephen23 on 9 May 2017
Edited: Stephen23 on 9 May 2017
Here is one easy way, by generating one 3D array B and allocating all values of A in one go:
>> A = [7,4,1;4,5,6;3,6,9];
>> B = zeros(4,4,numel(A));
>> B(2,3,:) = A(:);
and testing each page of B, shows that it has all of the correct matrices:
>> B(:,:,1)
ans =
0 0 0 0
0 0 7 0
0 0 0 0
0 0 0 0
>> B(:,:,2)
ans =
0 0 0 0
0 0 4 0
0 0 0 0
0 0 0 0
>> B(:,:,3)
ans =
0 0 0 0
0 0 3 0
0 0 0 0
0 0 0 0
>> B(:,:,4)
ans =
0 0 0 0
0 0 4 0
0 0 0 0
0 0 0 0
etc
  2 Comments
Stephen23
Stephen23 on 9 May 2017
Edited: Stephen23 on 9 May 2017
"I can't deal with the 3D matrix after that"
Yes, you can: I showed you how to get the 2D matrices out of it. Have another look at all of those matrices in my answer. All of them are 2D. You can trivially loop over the third dimension of B to give you exactly what you asked for:
for k = 1:size(B,3)
M = B(:,:,k);
... your code dealing with M.
end
"I want element (3,2) to take the values from the 1st column in matrix A only."
Easy:
B = zeros(4,4,size(A,1));
B(2,3,:) = A(:,1);

Sign in to comment.

More Answers (0)

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Tags

No tags entered yet.

Community Treasure Hunt

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

Start Hunting!

Translated by