큰 행렬을 재정렬하거나 열 쌍 값에 의해 결정된 특정 순서로 행 추출

사용자 2578094

처리해야 할 큰 행렬이 있습니다 Z. Z이 형식의 요소는 약 200.000 행입니다.

 2     3     6   723
 3     4     7    65
 3     4     8    20
 3     6     9    10
 4     5     9   127
 4     5    10   120
 4     5    11   291
 4     7    14   576
 5     7     8   365
 5     9    11   216
 6     9    12    40
.....

행 반복이 없습니다. 번째 열은 ID 유형을 나타냅니다. 각 행의 처음 3 개 열은 오름차순으로 정렬됩니다. 행은 또한 첫 번째 열에있는 값의 오름차순입니다.

2 개의 행이 첫 번째 열에 동일한 숫자가있는 경우 첫 번째 행은 두 번째에서 가장 작은 값을 가진 행입니다 . 번째 열에도 동일한 원칙이 적용됩니다 . 예를 들어 다음 행에서 볼 수 있습니다.

 4     5     9   127
 4     5    10   120
 4     5    11   291
 4     7    14   576

아래 형식의 행렬을 얻어야합니다. 패턴을 쉽게 볼 수 있도록 행 사이에 공백을 추가했습니다.

요약하자면, 1 열과 2 열에 행이 2 열과 3 열에있는 동일한 값 쌍을 가진 다른 모든 행이 행 바로 뒤에 와야하는 행렬을 얻어야합니다. 현재 처리되고있는 것은 매트릭스에 추가되고 다음 행은 유사한 문제로 처리됩니다.

아래에서 (3,6) 쌍을 열에 2:3, 쌍 (3,6)을 열에 표시하십시오 1:2. 쌍 (4,7)도 동일합니다. 쌍 (4,8)과 일치하지 않습니다.

2     3     6   723
3     6     9    10

3     4     7    65
4     7    14   576

3     4     8    20

4     5     9   127
5     9    11   216

4     5    10   120
4     5    11   291
5     7     8   365
6     9    12    40

크기를 고려할 때 매우 느린 다음 코드 Z가 있습니다.

에서 T행 인덱스를 수집하고 Z있습니다. 30 분 넘게 걸렸기 때문에 완전히 실행되지 않았고, 안타깝게도 그러한 실행 시간으로는 쓸모가 없을 것입니다.

결국 나는 answer = Z2(T,:)원하는 순서로 행이있는 행렬을 얻는 것과 같은 일을 할 수 있기를 바랐습니다 .

나는 이미 테스트 한 행과 이미 찾은 패턴에 대해 0으로 while 루프 내부를 수정하고 있기 때문에 최종 답변 변수를 추출하기 위해, Z2복사본 Z을 사용하고 Z있습니다. .

Z2 = Z;
T = zeros(size(Z,1),1);
i = 0;
count = 1;
while size(T(T~=0),1) ~= size(Z,1)
    i = i + 1;
    if(isequal(Z(i,:),[0 0 0 0]))
        continue;
    end
    p = find(ismember(Z(:,1:2),Z(i,2:3),'rows'));
    T(count) = i;
    if(~isempty(p))
        T(count + 1:count + size(p,1)) = p;
    end
    Z(i,:) = 0;
    Z(p,:) = 0;
    count = count + size(p,1) + 1;
 end
로디 올 덴후 이스

글쎄, 가능한 속도 향상은 다음과 같은 대체품을 만드는 것입니다.

%// p = find(ismember(Z(:,1:2),Z(i,2:3),'rows'));
p = find( all(bsxfun(@eq, Z(:,1:2), Z(i,2:3)),2) );

이것은 ismember내장되어 있지 않기 때문에 작동하므로 MATLAB의 JIT 컴파일러로 루프를 효율적으로 가속화 할 수 없습니다.

더 많은 일을 할 수 있다고 생각하지만 먼저 이것을 시도하십시오. 내 PC (MATLAB R2010b, Win 7, 64 비트)에서는 약 10 배의 속도 향상이 있지만 확인해야 할 상황에서 컴퓨터의 프로필이 더 좋습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

큰 행렬에서 특정 숫자의 해당 값 추출

분류에서Dev

행렬의 행과 열에 해당하는 쌍으로 구성된 벡터 정렬

분류에서Dev

Theano : 행렬에서 특정 행 추출

분류에서Dev

특정 값보다 작거나 큰 특정 값을 제외한 행의 평균을 얻고 마지막으로 새 열을 추가하는 방법, Python, Pandas

분류에서Dev

정렬 된 열 값을 기반으로 SQL에서 행 연결

분류에서Dev

Numpy : 행렬의 각 열에 대해 특정 행에서 값 선택

분류에서Dev

특정 순서로 행렬의 행 재정렬

분류에서Dev

특정 행 / 열에서 값을 추출하고 다른 열에 추가

분류에서Dev

작은 행렬의 값을 큰 행렬의 지정된 위치에 할당

분류에서Dev

Matlab-행렬에서 값의 순서 순위를 열 현명하게 결정

분류에서Dev

특정 열 postgres에서 가장 큰 값을 가진 그룹의 행 선택

분류에서Dev

함수 내에서 생성 된 상관 행렬의 행과 열을 재정렬하는 방법

분류에서Dev

R에서 임계 값보다 큰 값을 가진 특정 쌍을 추출하기 위해 데이터 프레임을 반복합니다.

분류에서Dev

Matlab의 지정된 열에서 행렬 B와 동일한 값을 갖는 행렬 A의 행을 제거하는 방법은 무엇입니까?

분류에서Dev

행에서 0 값을 제거하고 행의 값을 내림차순으로 정렬하고 행의 0이 아닌 값에 대해 인덱스, 열 이름 및 점수를 새 df로 반환합니다.

분류에서Dev

텍스트 파일 내에서 값을 재귀 적으로 추출하고 더 많은 값을 반복하고 행과 열을 다시 정렬합니다.

분류에서Dev

data.table의 행을 특정 순서로 정렬

분류에서Dev

특정 행에서 특정 열의 값을 제거하는 방법

분류에서Dev

특정 행을 제외한 행렬의 열에서 최대 요소 찾기

분류에서Dev

이름 + 값이 열로있는 특정 ID의 행을 해당 고유 ID에 대해 결합 된 이러한 행 이름의 열로 변환하는 방법

분류에서Dev

값이 하나만 설정된 희소 행렬에서 열을 찾는 방법

분류에서Dev

R : 특정 행에 대해 개별적으로 루프 행렬 정렬 열

분류에서Dev

행렬의 열을 기준으로 목록의 값 정렬

분류에서Dev

Python의 특정 부분 행렬 추출

분류에서Dev

특정 위치에서 NaN 행렬에 행 및 열 값 할당

분류에서Dev

다른 두 개에 의해 결정된 순서대로 한 열 정렬 ( '매핑')

분류에서Dev

특정 열을 기준으로 지정된 값 범위에있는 모든 행을 awk의 쌍으로 인쇄합니다.

분류에서Dev

데이터 프레임의 특정 행을 열별로 정렬

분류에서Dev

Pandas의 열에 키 : 값 쌍이 지정된 행에서 열을 만드는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    큰 행렬에서 특정 숫자의 해당 값 추출

  2. 2

    행렬의 행과 열에 해당하는 쌍으로 구성된 벡터 정렬

  3. 3

    Theano : 행렬에서 특정 행 추출

  4. 4

    특정 값보다 작거나 큰 특정 값을 제외한 행의 평균을 얻고 마지막으로 새 열을 추가하는 방법, Python, Pandas

  5. 5

    정렬 된 열 값을 기반으로 SQL에서 행 연결

  6. 6

    Numpy : 행렬의 각 열에 대해 특정 행에서 값 선택

  7. 7

    특정 순서로 행렬의 행 재정렬

  8. 8

    특정 행 / 열에서 값을 추출하고 다른 열에 추가

  9. 9

    작은 행렬의 값을 큰 행렬의 지정된 위치에 할당

  10. 10

    Matlab-행렬에서 값의 순서 순위를 열 현명하게 결정

  11. 11

    특정 열 postgres에서 가장 큰 값을 가진 그룹의 행 선택

  12. 12

    함수 내에서 생성 된 상관 행렬의 행과 열을 재정렬하는 방법

  13. 13

    R에서 임계 값보다 큰 값을 가진 특정 쌍을 추출하기 위해 데이터 프레임을 반복합니다.

  14. 14

    Matlab의 지정된 열에서 행렬 B와 동일한 값을 갖는 행렬 A의 행을 제거하는 방법은 무엇입니까?

  15. 15

    행에서 0 값을 제거하고 행의 값을 내림차순으로 정렬하고 행의 0이 아닌 값에 대해 인덱스, 열 이름 및 점수를 새 df로 반환합니다.

  16. 16

    텍스트 파일 내에서 값을 재귀 적으로 추출하고 더 많은 값을 반복하고 행과 열을 다시 정렬합니다.

  17. 17

    data.table의 행을 특정 순서로 정렬

  18. 18

    특정 행에서 특정 열의 값을 제거하는 방법

  19. 19

    특정 행을 제외한 행렬의 열에서 최대 요소 찾기

  20. 20

    이름 + 값이 열로있는 특정 ID의 행을 해당 고유 ID에 대해 결합 된 이러한 행 이름의 열로 변환하는 방법

  21. 21

    값이 하나만 설정된 희소 행렬에서 열을 찾는 방법

  22. 22

    R : 특정 행에 대해 개별적으로 루프 행렬 정렬 열

  23. 23

    행렬의 열을 기준으로 목록의 값 정렬

  24. 24

    Python의 특정 부분 행렬 추출

  25. 25

    특정 위치에서 NaN 행렬에 행 및 열 값 할당

  26. 26

    다른 두 개에 의해 결정된 순서대로 한 열 정렬 ( '매핑')

  27. 27

    특정 열을 기준으로 지정된 값 범위에있는 모든 행을 awk의 쌍으로 인쇄합니다.

  28. 28

    데이터 프레임의 특정 행을 열별로 정렬

  29. 29

    Pandas의 열에 키 : 값 쌍이 지정된 행에서 열을 만드는 방법은 무엇입니까?

뜨겁다태그

보관