How to resolve issue while dealing with larger matrices?

1 回表示 (過去 30 日間)
Ammy
Ammy 2022 年 3 月 25 日
コメント済み: Arif Hoq 2022 年 3 月 25 日
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 件のコメント
Ammy
Ammy 2022 年 3 月 25 日
@Arif Hoq Got the point why I'm facing the problem, thank you very much. How can I vote your answers?
Arif Hoq
Arif Hoq 2022 年 3 月 25 日
i am posting my previous response as an answer

サインインしてコメントする。

回答 (2 件)

Voss
Voss 2022 年 3 月 25 日
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.
  1 件のコメント
Ammy
Ammy 2022 年 3 月 25 日
Got the point, thank you very much.

サインインしてコメントする。


Arif Hoq
Arif Hoq 2022 年 3 月 25 日
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

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by