Replace matrix entries with entries from another matrix

22 views (last 30 days)
There are two matrices A and B as under:
A = [0 0 0 0 0; 0 0 0 0 0; 0 0 0 0 0];
B = [1 1 1;2 2 2;3 3 3];
I want to create a third matrix C in which the columns of B replace columns of A incrementally i.e columns of B move inside A. For example:
C1 = [0 0 0 0 1;0 0 0 0 2;0 0 0 0 3];
C2 = [0 0 0 1 1;0 0 0 2 2;0 0 0 3 3];
C3 = [0 0 1 1 1;0 0 2 2 2;0 0 3 3 3];
C4 = [0 1 1 1 0;0 2 2 2 0;0 3 3 3 0];
  2 Comments
dpb
dpb on 15 Jul 2021
I'm not at all sure what your sample C arrays are to represent as a "third matrix C", but note
>> fliplr(tril(ones(4,5)))
ans =
0 0 0 0 1
0 0 0 1 1
0 0 1 1 1
0 1 1 1 1
>>
to build the pattern...
Waseem Akhtar
Waseem Akhtar on 15 Jul 2021
It's not a pattern, rather, the columns entries of B matrix should replace that of A matrix in a loop. For example, in the first increment the C matrix should be:
C1 =
0 0 0 0 1
0 0 0 0 2
0 0 0 0 3
In next increment, it should be:
C2 =
0 0 0 1 1
0 0 0 2 2
0 0 0 3 3
and likewise for next increments. You may better understand it by running the matrices defined in my query in the Matlab.
THanks

Sign in to comment.

Accepted Answer

Simon Chan
Simon Chan on 15 Jul 2021
I do it in a cell array:
clear; clc;
A = [0 0 0 0 0; 0 0 0 0 0; 0 0 0 0 0];
B = [1 1 1;2 2 2;3 3 3];
combine = [A,B];
idx = -1:-1:-4;
M=arrayfun(@(x) circshift(combine,[0,x]),idx,'UniformOutput',false);
C = cellfun(@(x) x(:,1:5),M,'UniformOutput',false)
If you really want the name to be C1, C2, C3 and C4, then
C1 = C{1};
C2 = C{2};
C3 = C{3};
C4 = C{4};
  3 Comments
Simon Chan
Simon Chan on 15 Jul 2021
Try the following:
However, the matrix C will be overwritten every time in the loop.
So additional manipulation on matrix C must be performed inside the loop.
clear; clc;
A = [0 0 0 0 0; 0 0 0 0 0; 0 0 0 0 0];
B = [1 1 1;2 2 2;3 3 3];
for idx = -1:-1:-4
M = circshift([A,B],[0,idx]);
C = M(:,1:5)
end
Result like this:
C =
0 0 0 0 1
0 0 0 0 2
0 0 0 0 3
C =
0 0 0 1 1
0 0 0 2 2
0 0 0 3 3
C =
0 0 1 1 1
0 0 2 2 2
0 0 3 3 3
C =
0 1 1 1 0
0 2 2 2 0
0 3 3 3 0

Sign in to comment.

More Answers (0)

Products


Release

R2021a

Community Treasure Hunt

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

Start Hunting!