Hi,
Say I have vector of N integers, 1 through N. Is there a quick way, without loops, to create a matrix where each row is a different randperm of the vector? My N can get large (up to 100).
Thanks

 Akzeptierte Antwort

Andrei Bobrov
Andrei Bobrov am 17 Sep. 2014
Bearbeitet: Andrei Bobrov am 17 Sep. 2014

5 Stimmen

[~, out] = sort(rand(M,N),2);

3 Kommentare

Jeremy
Jeremy am 17 Sep. 2014
Thanks. Now let me see if it speeds things up.
Mikhail
Mikhail am 18 Sep. 2014
Apparently, not-))
Jeremy
Jeremy am 18 Sep. 2014
Works orders of magnitude faster for large group sizes :)

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (3)

Guillaume
Guillaume am 17 Sep. 2014

1 Stimme

cell2mat(arrayfun(@(dummy) randperm(n), 1:m, 'UniformOutput', false)');
Whether or not that can be said to be without a loop is debatable as arrayfun is effectively looping over the array 1:m
Mikhail
Mikhail am 17 Sep. 2014

0 Stimmen

4 Kommentare

Jeremy
Jeremy am 17 Sep. 2014
Bearbeitet: Jeremy am 17 Sep. 2014
Thanks for the quick response, but my N can get large (up to 100) and rows with the same permutation are OK.
Mikhail
Mikhail am 17 Sep. 2014
You originally wrote different permutation. Use randperm function for your programm. I don't know how do it without loop.
Image Analyst
Image Analyst am 17 Sep. 2014
In what universe, or decade, is 100 considered large? You actually mean 100, right, like ten times ten, not 100 million or 100 billion or something?
Jeremy
Jeremy am 17 Sep. 2014
100 is large when you talk about some types of group coordination. I need to select k individuals from a group of N to interact at different time steps. What I've been doing is generating all combinations and randomly selecting ones to fill an interaction matrix, but that combination matrix gets big fast.

Melden Sie sich an, um zu kommentieren.

Joseph Cheng
Joseph Cheng am 17 Sep. 2014

0 Stimmen

Well there is a randperm() function that will give you a random permuation. How to get it as a MxN matrix without a loop will take some more time to think about it.

1 Kommentar

Joseph Cheng
Joseph Cheng am 17 Sep. 2014
Bearbeitet: Joseph Cheng am 17 Sep. 2014
ok well it is possible to do it without a loop in 2ish lines. Use the function arrayfun() or cellfun() on an array of N*ones(M,1).

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Hilfe-Center und File Exchange

Produkte

Tags

Gefragt:

am 17 Sep. 2014

Kommentiert:

am 18 Sep. 2014

Community Treasure Hunt

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

Start Hunting!

Translated by