Replace matrix entries with entries from another matrix

3 views (last 30 days)
Waseem Akhtar on 15 Jul 2021
Commented: Waseem Akhtar on 15 Jul 2021
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];
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

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};
Waseem Akhtar on 15 Jul 2021
That's it.
Thanks alot!

Categories

Find more on Matrix Indexing in Help Center and File Exchange

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by