How to avoid having duplicate index result?

2 次查看(过去 30 天)
I have written this code it works correct but one thing is that when I run it it gives me duplicate result how can I avoid repetion if I run it for 24 times.
x=zeros(4,4);
temp=0;
test=zeros(3,3);
b=sum(x,1);
r=randperm(4);
for i=1:4
temp=0;
for j=1:4
% r=randi([1,3]);
if temp~=r(j)
temp=r(j);
if sum(x(i,:))==0 && b(temp)==0
x(i,temp)=1;
end
end
end
b=sum(x,1);
end
x
  3 个评论
Stephen23
Stephen23 2019-2-21
编辑:Stephen23 2019-2-21
Original (better explained) question, with simple three line answer:
@Hardi Mohammed: why do refuse to use perms, which is the best way to generate those 6/24/... permutations that you request. Please explain why perms does not work for you.
Hardi Mohammed
Hardi Mohammed 2019-2-25
@Stephen Cobeldick
it works well but I have problem when I change the size of matrix for 2 row 3 column
then it does not give all the possiblites

请先登录,再进行评论。

回答(2 个)

Jan
Jan 2019-2-21
If I assume, that this code satisfies your needs for 1 call:
x = zeros(4, 4);
x(sub2ind(size(x), 1:4, randperm(4,4))) = 1;
I assume, that this creates all wanted results:
order = perms(1:4);
n = size(order, 1);
order = order(randperm(n, n), :); % If a random order is wanted
x = zeros(4, 4, n);
for k = 1:n
index = sub2ind([4, 4, n], 1:4, order(k, :), repmat(k, 1, 4));
x(index) = 1;
end
Now x(:, :, k) is the wanted submatrix.
  2 个评论
Jos (10584)
Jos (10584) 2019-2-21
you can leave out the sub2ind ...
x = eye(4) ;
x = x(randperm(4),:)
Jan
Jan 2019-2-21
编辑:Jan 2019-2-21
@Jos: Your are correct, but the sub2ind method is not needed for the random permutation, but for the construction of all 24 different matrices.

请先登录,再进行评论。


Jos (10584)
Jos (10584) 2019-2-21
编辑:Jos (10584) 2019-2-21
This also produces the N! possibilities. No loop, no sub2ind, only the outcome of perms as column indices ...
N = 4
X = eye(N) ;
X = reshape(X(:, perms(1:N).'), N, N, [])

类别

Help CenterFile Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by