Initializing matrix randomly and by sample
1 回表示 (過去 30 日間)
古いコメントを表示
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.
0 件のコメント
採用された回答
Image Analyst
2014 年 4 月 29 日
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)
0 件のコメント
その他の回答 (2 件)
the cyclist
2014 年 4 月 29 日
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.
0 件のコメント
Roger Stafford
2014 年 4 月 29 日
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)));
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Descriptive Statistics についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!