私はcudaの初心者です。私は、cusolver APIを使用して行 - 主要な行列のsvdを解決しようとします。cusolver gesvd関数を使用して行主行列からSVDを解決する方法
私は行の主要な行列100x10を持っています(例えば、10次元の空間に100個のデータがあります)。 cusolverDnDgesvd関数が必要ですldaパラメータ(行列Aの先頭の次元)。私の行列は行主ですので、私は10をcusolver gesvd関数に与えました。しかし機能は機能しませんでした。この関数は私のldaパラメータが間違っていることを示しました。 [OK]を、私はcusolver gesvd関数に100を与えた。関数は機能していましたが、関数(U、S、Vt)の結果は間違っているようです。つまり、私は行列AをUから得ることができません。ベクトル
私の知る限り、cuSolver APIはすべての行列が列長であるとみなします。 行列を列メジャーに変更した場合、mはn(10x100)よりも小さくなります。しかし、gesvd関数はm> = nの場合にしか機能しません。
はい、困っています。どうすればこの問題を解決できますか?
ありがとうございます。 –
実際に私はちょうど転置を使用してこの問題を解決しました。 cuBLAS APIは、すべての入出力行列が列メジャーであることを前提としています。そこで、転置を使用して、行優先行列(100x10)を列長(10x100)に変更しました。私は、行主要行列からm、n、lda、ldu、ldvtなどの他のパラメータを与えたところで、その列主行列をgesvd関数に与えました。つまり、mを100に、nを10に、Aを転置行行列に、100をldaに、100をlduに、10をldvtにそれぞれ入力します。 機能はうまくいきました。 U * S * Vtから元行列Aを得ることができます。もちろん、gesvdのU、Vt行列も列長です。 –