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

Learn moreOpportunities for recent engineering grads.

Apply Today**New to MATLAB?**

Asked by Yuval
on 27 Mar 2013

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

*No products are associated with this question.*

Answer by Matt J
on 27 Mar 2013

Edited by Matt J
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.

## 0 Comments