Choose elements, matrix with fewer elements
조회 수: 2 (최근 30일)
이전 댓글 표시
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!
댓글 수: 0
채택된 답변
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
댓글 수: 0
추가 답변 (1개)
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.
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!