How to resolve issue while dealing with larger matrices?
Show older comments
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
No, its not same even for a smaller matrix. try to run several times for case 1. C and V are not same every time as you are working with random number.
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) ;
isequal(C,V)
%%
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) ;
isequal(C,V)
Ammy
on 25 Mar 2022
I am not sure about your expectation. but as you are working with random number you need to run several times to get the V from B. still need to develop more.
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
Ammy
on 25 Mar 2022
Arif Hoq
on 25 Mar 2022
But when I run only one time, and name them with a varable then it is fixed, until I run it next time
can you please show the result ?
Ammy
on 25 Mar 2022
Arif Hoq
on 25 Mar 2022
You want to get V from B, right ? only the the value of V(here 2 13 8 7) ? and how about other values in B( here 1 4 7 4 3 7 3 13 11 12 13 2 13 7 6 8 ) ? others would be 0 ?
Ammy
on 25 Mar 2022
Arif Hoq
on 25 Mar 2022
i am posting my previous response as an answer
Answers (2)
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(:)'
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
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
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 Number Theory 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!