필터 지우기
필터 지우기

Choose elements, matrix with fewer elements

조회 수: 3 (최근 30일)
Vivek Subramanian
Vivek Subramanian 2011년 6월 17일
Hi Everyone,
I have two matrices of unknown size and I wish to choose all the elements of the smaller matrix and 'n' random elements from the larger matrix, where 'n' is the length of the smaller matrix. I also do not want to reuse indices when doing the random selection. Could you please teach me how to do this most efficiently?
Thank you!

채택된 답변

Doug Eastman
Doug Eastman 2011년 6월 17일
function y = myFun(a,b)
aN = numel(a);
bN = numel(b);
% Make sure a is smaller
if aN>bN
temp = b;
b = a;
a = temp;
temp = bN;
bN = aN;
aN = temp;
end
i = randperm(bN)';
y = [a(:);b(i(1:aN))];
end

추가 답변 (1개)

Walter Roberson
Walter Roberson 2011년 6월 17일
ael = numel(A);
bel = numel(B);
if ael < bel
alen = length(A);
ridx = randperm(1:bel);
output = [A(:); reshape(B(ridx(1:alen)),[],1)];
elseif bel < ael
blen = length(B);
ridx = randperm(1:ael);
output = [B(:); reshape(A(ridx(1:blen)),[],1)];
else
error('Output not defined when arrays are same size');
end
Your task would be a little easier if you were not selecting according to the length of the smaller matrix, since matrix size is determined by the number of elements, not by the first non-unitary dimension (the definition of "length").
Perhaps you meant to write about vectors rather than about matrices? But if so then what if the vectors are different orientations?
Also, I was not able to figure out whether you wanted the smaller matrix to be shuffled or copied intact, and I couldn't tell if you wanted the outputs to be separate or combined sequentially or intra-shuffled.

카테고리

Help CenterFile Exchange에서 Random Number Generation에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by