sharing of numbers in the matrix

If
A=[0.1 0 0.2 0 0 0 0 0;0 0 0 0.3 0.4 0 0 0;0 0.5 0 0 0 0 0 0.6;0 0 0 0 0 0.7 0.8 0]
I want to have
B=[0.1 0 0.2 0.3 0.4 0 0 0;0.1 0 0.2 0.3 0.4 0 0 0;0 0.5 0 0 0 0 0.7 0.8 0.6;0 0.5 0 0 0 0 0.7 0.8 0.6]
could anyone tell me how to get it?

6 Comments

The rows of B don't have the same length.
What is "sharing of numbers"?
A =
0.1000 0 0.2000 0 0 0 0 0
0 0 0 0.3000 0.4000 0 0 0
0 0.5000 0 0 0 0 0 0.6000
0 0 0 0 0 0.7000 0.8000 0
B =
0.1000 0 0.2000 0.3000 0.4000 0 0 0
0.1000 0 0.2000 0.3000 0.4000 0 0 0
0 0.5000 0 0 0 0.7000 0.8000 0.6000
0 0.5000 0 0 0 0.7000 0.8000 0.6000
I made the mistake in B.Now could you tell me how to get b from A.
What is the exact connection between A and B? Why, for instance, is B(2,2) 0 and not 0.5?
A is a matrix of subcarrier allocation to users,where rows denote users and columns denote subcarriers.B(2,2) is 0 which means subcarrier is not being used by user1 and user2.
I am completely lost ... Stephen and Andrei, the floor is yours

Sign in to comment.

Answers (2)

Stephen23
Stephen23 on 15 Dec 2017
Edited: Stephen23 on 15 Dec 2017
Solution to your original question:
>> reshape(repmat(max(reshape(A,2,[])),2,1),size(A))
ans =
0.10000 0.00000 0.20000 0.30000 0.40000 0.00000 0.00000 0.00000
0.10000 0.00000 0.20000 0.30000 0.40000 0.00000 0.00000 0.00000
0.00000 0.50000 0.00000 0.00000 0.00000 0.70000 0.80000 0.60000
0.00000 0.50000 0.00000 0.00000 0.00000 0.70000 0.80000 0.60000
Solution to your later comment:
>> repmat(reshape(max(reshape(A,2,[])),2,[]),2,1)
ans =
0.10000 0.00000 0.20000 0.30000 0.40000 0.00000 0.00000 0.00000
0.00000 0.50000 0.00000 0.00000 0.00000 0.70000 0.80000 0.60000
0.10000 0.00000 0.20000 0.30000 0.40000 0.00000 0.00000 0.00000
0.00000 0.50000 0.00000 0.00000 0.00000 0.70000 0.80000 0.60000
Andrei Bobrov
Andrei Bobrov on 15 Dec 2017
Edited: Andrei Bobrov on 15 Dec 2017
out = repelem(squeeze(max(permute(reshape(A,2,2,[]),[1,3,2]))),1,2)';
or
out = A;
[ii,jj] = find(A);
t = rem(ii,2);
out(sub2ind(size(out),ii - ~t + t,jj)) = A(A>0);

3 Comments

If i need to have B such that B =
0.1000 0.5000 0.2000 0 0 0 0 0.6000
0 0 0 0.3000 0.4000 0.7000 0.8000 0
0.1000 0.5000 0.2000 0 0 0 0 0.6000
0 0 0 0.3000 0.4000 0.7000 0.8000 0
how it can be done.
See Stephen's answer (first part).
B = reshape(repmat(max(reshape(A,2,2,[]),[],2),1,2),size(A));
or
[ii,jj] = find(A);
B = A;
B(sub2ind(size(A),rem(ii + 1,4)+1,jj)) = A(A>0);

Sign in to comment.

Asked:

on 15 Dec 2017

Edited:

on 15 Dec 2017

Community Treasure Hunt

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

Start Hunting!