Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

New to MATLAB?

How to permute a row vector without using perms(), permute() etc.

Asked by Yuval

Yuval (view profile)

on 27 Mar 2013
Accepted Answer by Matt J

Matt J (view profile)

I would like to permute a row vector, but without using perms(), permute() and so forth. I was wondering whether the following code answers these requirements. I mean, am I somewhat "cheating" by using randi()? I'd also appreciate any comments on the algorithm in general (although I know the function works well).

function  Y = ex(X) 
Y = zeros(1,length(X));
for i = 1:length(X)
  d = randi(length(X));
  Y(i) = X(d);
  X(d) = [];
end

0 Comments

Yuval

Yuval (view profile)

Products

No products are associated with this question.

1 Answer

Answer by Matt J

Matt J (view profile)

on 27 Mar 2013
Edited by Matt J

Matt J (view profile)

on 27 Mar 2013
Accepted answer

It doesn't violate any requirements that you've mentioned, so I'm inclined to say it's legal. Here's another way, if you don't like randi for some reason

n=length(X);
 [~,~,e]=qr(sprand(n,n,1/n));
 Y=reshape(e*X(:),size(X)),

If the permuted order is supposed to be random, I don't think there's any avoiding the use some sort of random number generator.

2 Comments

Yuval

Yuval (view profile)

on 27 Mar 2013

Is it "legal" that my code changes the original vector?

Matt J

Matt J (view profile)

on 27 Mar 2013

Only you and presumably the instructor who assigned this to you can know what is "legal" for you.

Matt J

Matt J (view profile)

Contact us