我正在尝试使用SciPy的dgemm在Python中计算A*AT,但是当A具有大的行维度(~50,000)并且我以F顺序传递矩阵时得到段错误.当然,得到的矩阵非常大,但是sgemm和传递到C阶的dgemm工作,
>>> 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)
Run Code Online (Sandbox Code Playgroud)
有没有人之前遇到过这个bug或者有什么想法导致它?我使用的是Python 2.7.3,numpy 1.8.0和scipy 0.13.2.
编辑: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)
Run Code Online (Sandbox Code Playgroud)
以上两者都成功了.
编辑:BLAS信息 …