CUDA中非方矩阵的计算机逆矩阵
我试图在CUDA中找到非方矩阵的Moore–Penrose伪逆 今天,我使用以下代码作为Moore-Penrose伪逆的实现 问题是,我试图找到的伪逆的非平方矩阵大小相当大,因此我想通过使用CUDA利用GPU的能力来解决它。 我基本上是寻找这个代码的CUDA版本CUDA中非方矩阵的计算机逆矩阵,cuda,gpu,matrix-inverse,Cuda,Gpu,Matrix Inverse,我试图在CUDA中找到非方矩阵的Moore–Penrose伪逆 今天,我使用以下代码作为Moore-Penrose伪逆的实现 问题是,我试图找到的伪逆的非平方矩阵大小相当大,因此我想通过使用CUDA利用GPU的能力来解决它。 我基本上是寻找这个代码的CUDA版本 public static Matrix PseudoInverse(this Matrix M) { Svd<double> D = M.Svd(true); Matrix W =
public static Matrix PseudoInverse(this Matrix M)
{
Svd<double> D = M.Svd(true);
Matrix W = (Matrix)D.W;
Vector s = (Vector)D.S;
// The first element of W has the maximum value.
double tolerance = Precision.EpsilonOf(2) * Math.Max(M.RowCount, M.ColumnCount) * W[0, 0];
for (int i = 0; i < s.Count; i++)
{
if (s[i] < tolerance)
s[i] = 0;
else
s[i] = 1 / s[i];
}
W.SetDiagonal(s);
// (U * W * VT)T is equivalent with V * WT * UT
return (Matrix)(D.U * W * D.VT).Transpose();
}
公共静态矩阵伪逆(此矩阵M)
{
Svd=M.Svd(真);
矩阵W=(矩阵)D.W;
向量s=(向量)D.s;
//W的第一个元素具有最大值。
双公差=精度.EpsilonOf(2)*数学最大值(M.RowCount,M.ColumnCount)*W[0,0];
对于(int i=0;i
- 是否有人对CUDA中的Moore–Penrose伪逆实现有任何指示。
另外,我想知道还有什么其他方法可以使用可部署的GPU解决非方矩阵的Moore–Penrose伪逆 好的,我使用CUDA的SVD函数实现了Moore-Penrose伪Invese 唯一的问题是CUDA版本的SVD比原生MKL版本慢得多!在求解1000 x 1000的矩阵大小时,CUDA的SVD函数几乎比MKL library的SVD函数慢4倍
在旁注中,我看到有人声称CULA过去速度快得多,但现在已经不受支持了。CULA仍在商业上提供,但每年的许可成本约为2.5万英镑。该代码不计算矩阵逆。它计算摩尔-彭罗斯伪逆。对于非方矩阵,不存在逆矩阵。根据定义,它们并不存在。但是,无论如何,因为这个问题是离题的,我已经投票决定结束它。这个问题是离题的,永远不应该被重新讨论。你能解释一下为什么这个问题不应该出现在StackOverflow中吗?