擅长:python、mysql、java
<p>这是一个棘手的问题,这里的问题是Python使用Row主顺序,但是CULA使用列major order作为R。请查看CULA文档以了解更多详细信息。在</p>
<p>以下是scikit cuda的示例:</p>
<pre><code>import numpy as np
import pycuda.gpuarray as gpuarray
import pycuda.autoinit
from skcuda import linalg
linalg.init()
# skcuda
A = np.ones( (3,3) )
A_gpu = gpuarray.to_gpu(np.array(A, order='F'))
Q , R = linalg.qr(A_gpu)
Q, R = Q.get(), R.get()
print Q.dot(R) #recovers A
[[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]]
print Q.T.dot(Q) # As expected
[[ 1.00000000e+00 -5.55111512e-17 1.11022302e-16]
[ -5.55111512e-17 1.00000000e+00 -2.22044605e-16]
[ 1.11022302e-16 -2.22044605e-16 1.00000000e+00]]
</code></pre>
<p>如果改为使用(这是Python中的默认设置)</p>
^{pr2}$
<p>你会得到和你在上面发布的相同的错误结果。在</p>
<p>这个问题可能导致几个问题,所以你必须非常小心,并注意矩阵的顺序。在</p>
<p>干杯,
本</p>