How to resolve issue while dealing with larger matrices?

2 views (last 30 days)
A=randi(16,[4,4]);
B=A(:)';
P=randi(16,[1 4]);
V=randi(16,[1 4]);
B(P)=V; % replace entries at position P with values in V
C=B(1,P)
C=V satisfied in this case
But I'm not getting the right answer in case of larger size matrices.
A=randi(255,[512,512]);
>> B=A(:)';
>> P=randi(255,[1 256]);
>> V=randi(256,[1 256]);
>> B(P)=V; %
>> C=B(1,P);
C should be equal to B , but I'm not getting it right,
Request for help regarding this.
  9 Comments
Ammy
Ammy on 25 Mar 2022
@Arif Hoq Got the point why I'm facing the problem, thank you very much. How can I vote your answers?

Sign in to comment.

Answers (2)

Voss
Voss on 25 Mar 2022
As @Arif Hoq points out, the problem is not with the size of the matrices. The problem is that the elements of P are not guaranteed to be unique. Look at what happens when a number occurs more than once in P, in this case 8 appears twice in P:
A=randi(16,[4,4]);
B=A(:)'
B = 1×16
8 9 11 8 9 4 5 11 1 14 13 5 1 15 13 5
P=randi(16,[1 4])
P = 1×4
7 1 8 8
V=randi(16,[1 4])
V = 1×4
2 11 13 4
B(P)=V % replace entries at position P with values in V
B = 1×16
11 9 11 8 9 4 2 4 1 14 13 5 1 15 13 5
C=B(1,P)
C = 1×4
2 11 4 4
C==V
ans = 1×4 logical array
1 1 0 1
In this case, B(P)=V is B([7 1 8 8]) = [2 11 13 4]; which means that B(8) is assigned the value 13 and then immediately assigned the value 4, so that B(8) is 4 after that step.
Then C = B(1,P) is C = B(1,[7 1 8 8]) = [2 11 4 4] not [2 11 13 4] = V
Any time P has repeated values, then V will not be recoverable from B and P.

Arif Hoq
Arif Hoq on 25 Mar 2022
A=randi(16,[4,4]);
B=A(:)';
P=randi(16,[1 4]);
V=randi(16,[1 4]);
[C out]=ismember(V,B);
if numel(out(out~=0)) ==4
disp(out)
else
disp('V is not the member of B')
end

Categories

Find more on Resizing and Reshaping Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!