- Do you want the sum of A is the same as the sum of B?
- Do you want exactly 3 (for examples) values in A to be already repeated in B?

1 view (last 30 days)

Show older comments

I am having two matrices A and B generated randomly with different values

A=rand(4,3)

B=rand(4,3)

Now I want to know is there any other way such that the some of the values generated in A can be made equal to the values generated in B.

Steven Lord
on 5 Jul 2021

A = rand(5, 5);

A1 = A; A2 = A; % Make copies for later comparison

B = rand(5, 5);

numberOfMatches = 6;

locationOfMatchesInB = randperm(numel(B), numberOfMatches);

If you want the elements from B to be in exactly the same locations in A:

A1(locationOfMatchesInB) = B(locationOfMatchesInB);

If you want the elements from B to be put in some location, but not necessarily the same locations, in A:

locationOfMatchesInA = randperm(numel(A), numberOfMatches);

A2(locationOfMatchesInA) = B(locationOfMatchesInB);

Now compare:

A

A1

A2

B

Where did A1 flip?

[sort(locationOfMatchesInB).', find(A1 ~= A)]

What changed?

A1(A1 ~= A)

B(A1 ~= A)

Walter Roberson
on 6 Jul 2021

A = rand(5, 5);

A1 = A; A2 = A; % Make copies for later comparison

B = rand(5, 5);

locationOfMatchesInB = randperm(numel(B), 6);

Amit Bhowmick
on 5 Jul 2021

Edited: Amit Bhowmick
on 5 Jul 2021

Check the values you will alyas get zero that is they are not equal. More preciesly probability of getting same value is very less. Basically the algorithm of generating random number is such you can learn here

https://en.wikipedia.org/wiki/Random_number_generation

rand(4,3)==rand(4,3) or isequal(rand(4,3),rand(4,3))

Walter Roberson
on 5 Jul 2021

A = sort(rand(300,300));

imagesc(A)

title('original')

p = 45700/48000;

mask = rand(size(A)) <= p;

B = [A(mask); rand(numel(A)-nnz(mask),1)];

B = reshape(B(randperm(numel(B))), size(A));

imagesc(B)

title('rerandom')

mean(ismember(B(:), A)) * 100

p * 100

So in this case, the target fraction to keep was 95.2083% and the actual fraction kept was 95.2233%

If it was necessary to have exactly the ratio 45700/48000 stay the same then that could be done... though it becomes trickier if you are working with integers.

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

Start Hunting!