小编Bri*_*own的帖子

dgemm segfaulting与scipy中的大F阶矩阵

我正在尝试使用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信息 …

python numpy matrix blas scipy

8
推荐指数
1
解决办法
443
查看次数

标签 统计

blas ×1

matrix ×1

numpy ×1

python ×1

scipy ×1