큰 희소 행렬 A
을 가지고 있으며, A의 3X3 블록 대각선의 희소 행렬을 만들고 싶습니다. 어떻게해야합니까? A
은 매우 크고 스파 스 (sparse)하므로 반복을 사용하는 모든 메서드가 느려지고 전체 (희소성이없는) 행렬을 만드는 일부 메서드를 사용하는 메서드는 너무 많은 메모리를 차지합니다.matlab : 대용량 희소 행렬의 블록 대각선을 추출하십시오.
0
A
답변
1
나는 여기에 몇 가지 코드합니다 (%%%%%%%%%%%
라인 사이의 부분을보고는, 제대로 이해하고. 아래는 for
루프에도 불구하고 나에게 합리적인 보이는 결과를, 타이밍. 유일한 트릭은 SP_Alloc로 기능의 사용 인 . 당신이 당신의 응용 프로그램에 대해 조정할 수있다
for N= [(3:3:12) (15:600:9000)]
bigsparse = sprand(N,N,0.1);
tic;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
origSize = size(bigsparse);
diagSize = 3;
numDiags = size(bigsparse,1)/diagSize;
assert(numDiags == floor(numDiags))
bigsparse_diagonals = spalloc(origSize(1), origSize(2), ceil(prod(origSize)*0.1));
for ix=(1:numDiags)-1
ixsCurrent = ix*diagSize+[1:diagSize];
bigsparse_diagonals(ixsCurrent,ixsCurrent) = ...
bigsparse(ixsCurrent,ixsCurrent);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fprintf(1,'%5d size --> %6.5f seconds \n', N, toc)
end
타이밍 결과 (참고, 실제로는 무작위 시험 재 포맷을하는 것보다 행렬을 생성하기 위해 많은 오래 걸립니다) :
3 size --> 0.00135 seconds 6 size --> 0.00014 seconds 9 size --> 0.00013 seconds 12 size --> 0.00014 seconds 15 size --> 0.00015 seconds 615 size --> 0.00392 seconds 1215 size --> 0.00874 seconds 1815 size --> 0.01537 seconds 2415 size --> 0.02570 seconds 3015 size --> 0.03595 seconds 3615 size --> 0.05007 seconds 4215 size --> 0.06420 seconds 4815 size --> 0.08690 seconds 5415 size --> 0.10077 seconds 6015 size --> 0.13322 seconds 6615 size --> 0.14923 seconds 7215 size --> 0.17562 seconds 7815 size --> 0.37371 seconds 8415 size --> 0.23060 seconds
+0
당신은 완벽하게 이해했습니다 :) 정확히 내가 뭘 찾고 있었는지, 고마워요! – olamundo
관련 문제
- 1. 희소 행렬의 점 제품
- 2. 희소 행렬의 가변 개수
- 3. 희소 행렬의 행에서 희소 대각선 행렬을 만듭니다.
- 4. 파이썬에서 행렬의 대각선을 문자열로 채우려면 어떻게해야합니까?
- 5. if 문을 사용하여 행렬의 대각선을 변경합니까?
- 6. matlab : 희소 매트릭스 분해
- 7. Matlab : 벡터 행렬의 결정자
- 8. R : 희소 행렬의 모든 항목을 매핑하는 방법
- 9. SciPy의 두 희소 행렬의 내적을 취하는 ValueError
- 10. Matlab - 희소 행렬 시스템 해상도
- 11. matlab : 추가로 희소 행렬 채우기
- 12. MatLab - 행렬의 역함수를 찾는 알고리즘
- 13. MATLAB : 행렬의 여러 열을 플로팅
- 14. 큰 정사각형 행렬의 대각선을 따라 더 작은 정사각형 행렬을 R
- 15. MATLAB에서 3 차원 행렬의 대각선을 어떻게 인덱스 할 수 있습니까?
- 16. MATLAB : 희소 행렬 출력에서 nz 숨기기
- 17. MATLAB : 두 배열을 희소 행렬로 변환
- 18. 대용량 행렬에서 대각선을 벗어난 평균을 더 빨리 계산하는 방법
- 19. PCG 해석을 수행 할 때 희소 행렬의 행을 정렬해야합니까?
- 20. MATLAB : 행렬의 n 개의 하위 집합 정의
- 21. Matlab : 행렬의 각 행을 인덱스의 함수로 표시
- 22. MATLAB - (!들은 "합의"되지만) 행렬의 크기는 여기
- 23. MATLAB : 행렬의 원소 분포를 계산하는 방법
- 24. MATLAB - 2D 행렬의 영역에서 최대 값을 찾습니다.
- 25. MATLAB : 행렬의 사전 할당 오류가 발생했습니다.
- 26. Matlab Plot에서 행렬의 대각선에 레이블을 붙입니다.
- 27. 스칼라가 희소 벡터를 만듭니다.
- 28. Matlab의 대용량 파일에서 데이터 블록 가져 오기
- 29. MATLAB : 모호한 제목
- 30. 희소 행렬을 더 큰 희소 행렬로 확장/변환
@MitchWheat을 - 나는 더 느린 것을 권 해드립니다. 다음 번에 질문 : 두 번째 줄에 질문이 있습니다 : "어떻게해야합니까?"다음에 부록이 있습니다. – olamundo
적절한 포럼에서 질문하는 것이 좋습니다. –
@MitchWheat - 좋은 대답을 얻은 것처럼 보이지만, 이런 유형의 질문에 대한 더 나은 포럼이 있다면 장래에 기꺼이 게시 할 것입니다. 어떤 포럼입니까? – olamundo