2015-01-10 3 views
1

숫자가 반복되는 배열에서 행을 찾고 고유 한 행으로 대체하는 기능이 있습니다. 여기 함수이다고유 한 행이 다릅니다.

NVAR = 고유 행

PVBu의 파라미터의 개수는 기본

function [A]=nonrepeatuniquerow(A,NVAR,PVBu) 
HM = zeros(1,NVAR); 
p = zeros(1,PVBu); 
for j = 1 
p(1:PVBu) = 1:PVBu; 
for k = PVBu:-1:PVBu-NVAR+1 
q = ceil(k*rand); 
HM(j,PVBu-k+1) = p(q); 
p(q:k-1) = p(q+1:k); 
end 
end 
b = any(~diff(sort(A,2),1,2),2) | any(A==0,2); 

A(b,:) = repmat(HM,sum(b),1); 
end 

의해 1

하한 행 번호의 상한 인 = 예를 들어,

[9 1 7]은 임의로 생성 된 고유 한 행이라고 가정합니다.

매트릭스 A는 'nonrepeatuniquerow'함수에 전달됩니다.

A= [2 3 3 
    2 5 2 
    1 5 9 
    9 7 6] 

그리고 출력

은 다음과 같습니다

A= [9 1 7 
    9 1 7 
    1 5 9 
    9 7 6] 

내 질문은 서로 다른 고유 한 행함으로써 반복 수를 갖는 행을 대체 할 방법 기능을 수정하는 것입니다? 유일한 고유 행이 호출 될 때마다 생성

A= [7 2 3 
    2 1 8 
    1 5 9 
    9 7 6] 

함수 아래에 다음과 같이

는 예를 들어 출력이 될 수있다.

NVAR은 = 고유 행

PVBu에서 매개 변수의 수는 기본

function [HM]=generateunique(NVAR,PVBu) 

HM = zeros(1,NVAR); 
p = zeros(1,PVBu); 
for j = 1 
p(1:PVBu) = 1:PVBu; 
for k = PVBu:-1:PVBu-NVAR+1 
q = ceil(k*rand); 
HM(j,PVBu-k+1) = p(q); 
p(q:k-1) = p(q+1:k); 
end 
end 
end 

에 의해 1

하한 행의 수의 상한이다 = 내가 크게 도움을 부탁드립니다 이 문제를 해결해 주시겠습니까?

답변

1

함수 nonrepeatuniquerow에서 첫 번째 부분은 무작위 시퀀스 HM을 만들기위한 것입니다. for 루프에서 고유하지 않은 모든 행을 실행하고 각 행에 대해 각각 HM을 작성할 수 있습니다. 즉,이 같을 것이다 : 당신은 또한에 의해 generateunique 기능이나 코드에서 동일한 작업을 수행하는 부분을 대체 할 수

function [A]=nonrepeatuniquerow(A,NVAR,PVBu) 

b = any(~diff(sort(A,2),1,2),2) | any(A==0,2); 
for ii=find(b==1).' 
    HM = zeros(1,NVAR); 
    p = zeros(1,PVBu); 
    for j = 1 
     p(1:PVBu) = 1:PVBu; 
     for k = PVBu:-1:PVBu-NVAR+1 
      q = ceil(k*rand); 
      HM(j,PVBu-k+1) = p(q); 
      p(q:k-1) = p(q+1:k); 
     end 
    end 
    A(ii,:) = HM; 
end 
end 

내장 randperm 기능. 당신은

function A = nonrepeatuniquerow(A,NVAR,PVBu) 

b = any(~diff(sort(A,2),1,2),2) | any(A==0,2); 
for ii=find(b==1).' 
    A(ii,:) = randperm(PVBu,NVAR); 
end 

end 
+0

아 좋아, 내가 이해 다음 코드를 당신에게 줄 것이라고

HM = randperm(PVBu,NVAR); 

에 의해 고유의 임의의 순서를 만들 수 있습니다! 친절한 답변을 해주셔서 감사합니다. 제 질문에 완전히 대답 할 수있는 시간을 갖는 것이 좋습니다. 코드는 훌륭하게 작동합니다! 도와 주셔서 정말 고맙습니다. –

관련 문제