SciPy의 dgemm을 사용하여 Python에서 A * AT를 계산하려고하는데 A에 큰 행 크기 (~ 50,000)가 있고 F에서 행렬을 전달할 때 segfault를 얻으려고합니다. -주문. 물론, 결과 행렬은 매우 큰이지만, 원인이 뭐죠 모두 sgemm 및 C-주문 작품 DGEMM을 통과은dgemm scipy에서 큰 F- 순서 행렬을 사용하여 segfaulting
>>> import numpy as np
>>> import scipy.linalg.blas
>>> A = np.ones((50000,100))
#sgemm works, A.T is in F-order
>>> C = scipy.linalg.blas.sgemm(alpha=1.0, a=A.T, b=A.T, trans_a=True);
#dgemm works, A is in C-order (slower)
>>> C = scipy.linalg.blas.dgemm(alpha=1.0, a=A, b=A, trans_b=True);
#dgemm segfaults when both are in F order
>>> C = scipy.linalg.blas.dgemm(alpha=1.0, a=A.T, b=A.T, trans_a=True);
Segmentation fault (core dumped)
은 사람이하기 전에이 버그를 경험이나 생각을 했습니까? 파이썬 2.7.3, numpy 1.8.0 및 scipy 0.13.2를 사용하고 있습니다.
EDIT : FWIW는 오류를 생성하는 유일한 순서입니다.
>>> C = scipy.linalg.blas.dgemm(alpha=1.0, a=A.T, b=A, trans_a=True, trans_b=True)
>>> C = scipy.linalg.blas.dgemm(alpha=1.0, a=A, b=A.T)
위의 두 가지 모두 성공합니다.
편집 : BLAS 정보는
blas_opt_info:
libraries = ['ptf77blas', 'ptcblas', 'atlas']
library_dirs = ['/usr/lib/atlas-base']
define_macros = [('ATLAS_INFO', '"\\"3.8.4\\""')]
language = c
include_dirs = ['/usr/include/atlas']
어떤 Blas 라이브러리를 사용하고 있습니까? 'np .__ config __. blas_info'. – jtaylor
정보를 포함하도록 수정 된 설명 –