Initializing matrix randomly and by sample

Hi
I have a matrix X with size m x n and a matrix U with size m x k where k >> n.
Now first I want to fill the columns of matrix U with random columns of matrix X. How can I do that efficiently? Just make a permutation of the columns of X is not possible because there are much more columns in U than in X.
Second I want fill the columns of U with random unit length vectors. How can I do this efficiently? I think just looping over all columns in U and creating a random vector is inefficient.

 Réponse acceptée

Image Analyst
Image Analyst le 29 Avr 2014
Try this:
% Create sample data.
x = randi(4, [3,4]);
u = zeros([3,20]);
% Get the two sizes.
[rowsx, colsx] = size(x)
[rowsu, colsu] = size(u)
% Get list of random columns of x to transfer to u.
xColsToUse = randi(colsx, [colsu, 1])
% Transfer columns of x to u
u(:, 1:colsu) = x(:, xColsToUse)

Plus de réponses (2)

the cyclist
the cyclist le 29 Avr 2014
First one:
If you have the Statistics Toolbox, you can use
U = X(:,randsample(m,k,'true'))
If not, you can use the randi() function to accomplish the same thing.
Roger Stafford
Roger Stafford le 29 Avr 2014
For the first question use 'randi'
p = randi(n,1,k);
U = X(:,p);
For the second, very different, question do:
U = randn(m,k);
U = bsxfun(@rdivide,U,sqrt(sum(U.^2,1)));

Catégories

En savoir plus sur Random Number Generation dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by