2009-10-15 2 views
4

큰 행렬의 내부 위치 조 변경을 수행해야합니다 (다른 행렬을 할당하고 조 변경하는 가장 간단한 방법은 작동하지 않습니다). 불행히도이 큰 행렬은 정사각형이 아닙니다. 게다가 행렬은 별도로 저장되는 열과 행의 수와 함께 두 배의 배열에 저장됩니다.C++ 행렬 변환. uBLAS를 높이고 이중 *?

부스트가 uBLAS 라이브러리를 가지고 있지만 uBLAS 매트릭스에 제 어레이 배열을 래핑하는 방법을 찾지 못했습니다. 이것을 할 수있는 방법이 있습니까?

또는 다른 방법으로 작업하는 것이 좋습니다?

답변

2

매우 큰 행렬이 있고 임시 복사본을 저장하고 싶지 않은 경우 한 가지 해결책은 매트릭스 배열을 클래스에 랩핑하고 정상 또는 전치 방식으로 요소를 반복 할 다른 어댑터를 제공하는 것입니다. 이것은 캐시 효율이 높지 않지만 큰 행렬에 메모리를 저장합니다.

1

행렬 연산이 진행됨에 따라 행렬 전치 연산이 매우 쉽습니다. 나는 uBLAS에 대해 걱정하지 않고 직접 해보는 것이 좋습니다. 적어도이 문제에 대해서는. 몇 가지 미묘한 점이 있지만 wikipedia's article on in-place matrix transposition은 놀랍습니다.

데이터 표현을 약간 제어 할 수 있다면 더 잘 할 수 있습니다. 전치 T가있는 행렬 M을 가지고 있다면, 분명히 M [x] [y] == T [y] [x]이므로, 전치 행렬이 필요한 부분에 따라 다음과 같은 데이터 변환을 수행 할 필요가 없을 수도 있습니다. 모든.

1

사용 사례에 따라 다르지만, 정사각형이 아닌 큰 전치가 적절합니다. 중핵 대 out-of-core는 누군가가 걱정하는 가장 큰 구별 인 것을 보인다.