친애하는 stackoverflow 커뮤니티!파이썬 numpy.fft가 strides를 바꾼다
오늘 저는 하이 엔드 클러스터 아키텍처에서 1921 x 512 x 512 크기의 2 개 큐브의 요소 단위 승수가 ~ 27 초를 차지한다는 것을 알았습니다. 이것은 현재 구현에서 파워 스펙트럼의 방위각 평균에 대해 적어도 256 번 같은 계산을 수행해야하므로 너무 길다. 느린 성능은 주로 다른 스트라이드 구조 (한 사례에서는 C, 다른 시나리오에서는 FORTRAN) 때문인 것으로 나타났습니다. 두 배열 중 하나는 새로 생성 된 부울 그리드 (C 순서)이고 다른 하나 (FORTRAN 순서)는 3D numpy.fft.fftn() 입력 격자의 푸리에 변환 (C 순서)에서 왔습니다. numpy.fft.fftn()이 축을 뒤집는 것을 제외하고는이를 방지하는 방법에 대한 보행과 아이디어를 변경하는 이유는 무엇입니까? (이는 단지 일시적인 해결책 일까?) 비슷한 보폭 (FT 그리드의 ndarray.copy())으로 ~ 4s를 달성 할 수 있습니다. 엄청난 개선입니다.
문제는 다음과 같은 그러므로 :
배열을 고려
ran = np.random.rand(1921, 512, 512)
ran.strides
(2097152, 4096, 8)
a = np.fft.fftn(ran)
a.strides
(16, 30736, 15736832)
우리는 보폭 구조가 다르다 볼 수 있듯이. 어떻게 이것을 막을 수 있습니까? (= ran, axes = (1,0)) = np.fft.fftn을 사용하지 않고? 스트라이드 구조에 영향을 줄 수있는 다른 numpy 배열 루틴이 있습니까? 이 경우 어떻게 할 수 있습니까?
유용한 조언은 평소와 같이 많이 감사합니다!
plz 질문 수정을 고려하십시오. 당신의 질문은 정확히 무엇입니까. 그것을 얻기가 매우 어렵습니다. – kmonsoor
'fft'는 빠른 FORTRAN 코드를 사용하고 해당 순서를 기대할 수 있습니다. 입력이 F도 주문일 경우 어떻게됩니까? – hpaulj
'scipy.fftpack' 버전을 사용해보십시오. – hpaulj