Choose elements, matrix with fewer elements
6 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Réponse acceptée
Doug Eastman
le 17 Juin 2011
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 commentaires
Plus de réponses (1)
Walter Roberson
le 17 Juin 2011
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 commentaires
Voir également
Catégories
En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!