Choose elements, matrix with fewer elements

6 次查看(过去 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!

采纳的回答

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 中查找有关 Creating and Concatenating Matrices 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by