gesvd (USM バージョン)#
一般長方形行列の特異値分解を計算します。このルーチンは、oneapi::mkl::lapack 名前空間に属します。
説明#
このルーチンは、実数/複素数 m 行 n 列の行列 A の特異値分解 (SVD) を計算し、オプションで左特異ベクトルと右特異ベクトルを計算します。SVD は次のように記述されます。
実ルーチンの場合、
A = U*Σ*VT複素数ルーチンの場合、
A = U*Σ*VH
ここで、Σ は m 行 n 列の対角行列、U は m 行 m 列の直交/ユニタリー行列、V は n 行 n 列の直交/ユニタリー行列です。Σ の対角要素は A の特異値です。これらは実数かつ非負であり、降順で返されます。U と V の最初の min(m, n) 列は、A の左特異ベクトルと右特異ベクトルです。
API#
構文#
namespace oneapi::mkl::lapack {
sycl::event gesvd(sycl::queue &queue,
mkl::jobsvd jobu,
mkl::jobsvd jobvt,
int64_t m,
int64_t n,
T *a,
int64_t lda,
RealT *s,
T *u,
int64_t ldu,
T *vt,
int64_t ldvt,
T *scratchpad,
int64_t scratchpad_size,
const std::vector<sycl::event> &events = {})
}gesvd (USM バージョン) は、次の精度とデバイスをサポートします。
T |
サポートされるデバイス |
|---|---|
|
CPU |
|
CPU |
|
CPU |
|
CPU |
入力パラメーター#
- queue
計算が実行されるデバイスキュー。
- jobu
jobsvd::vectors、job::somevec、jobsvd::vectorsina、またはjob::novecである必要があります。行列Uのすべてまたは一部を計算するオプションを指定します。jobu = jobsvd::vectorsの場合、Uのすべてのm列が配列 u に返されます;jobu = job::somevecの場合、Uの最初のmin(m, n)列 (左特異ベクトル) が配列 u に返されます;jobu = jobsvd::vectorsinaの場合、Uの最初のmin(m, n)列 (左特異ベクトル) が配列 u に上書きされます;jobu = job::novecの場合、Uの列 (左特異ベクトルがない) は計算されません 。- jobvt
jobsvd::vectors, job::somevec、jobsvd::vectorsina、またはjob::novecである必要があります。行列 VT/VH のすべてまたは一部を計算するオプションを指定します。jobvt = jobsvd::vectorsの場合、VT/VH のすべての n 列が配列 vt に返されます;jobvt = job::somevecの場合、VT/VH (左特異ベクトル) の最初のmin(m, n)列が配列 vt に返されます;jobvt = jobsvd::vectorsinaの場合、VT/VH (左特異ベクトル) の最初のmin(m, n)列 が配列 a に上書きされます;jobvt = job::novecの場合、VT/VH (左特異ベクトルがない) の列は計算されません 。jobvt と jobu の両方を
jobsvd::vectorsinaにすることはできません。- m
行列
Aの行数 (0 ≤ m)。- n
行列
Aの列数 (0 ≤ n)。- a
配列 a へのポインター、サイズ
(lda,*)。aの 2 番目の次元はmax(1, n)以上でなければなりません。- lda
a の先頭次元。
- ldu
u の先頭次元。
- ldvt
vt の先頭次元。
- scratchpad
ルーチンが中間結果を保存するスクラッチパッド・メモリーへのポインター。
- scratchpad_size
Tタイプの浮動小数点要素の数であるスクラッチパッド・メモリーのサイズ。サイズは、gesvd_scratchpad_size 関数が返す値以下であってはなりません。- events
計算を開始する前に待機するイベントのリスト。デフォルトでは空のリストになります。
出力パラメーター#
- a
終了時、
jobu = jobsvd::vectorsinaの場合、a はUの最初のmin(m,n)列 (列ごとに格納された左特異ベクトル) で上書きされます;jobvt = jobsvd::vectorsinaの場合、a はVT/VH (列ごとに格納された左特異ベクトル) の最初のmin(m, n)行で上書きされます;jobu ≠ jobsvd::vectorsinaかつjobvt ≠ jobsvd::vectorsinaの場合、a の内容は破棄されます。- s
特異値を含む配列。サイズは
max(1, min(m,n))以上。s(i) ≥ s(i+1)となるようにソートされたAの特異値が含まれます。- u
Uを含む配列。jobu = jobsvd::vectorsの場合は u の 2 番目の次元はmax(1, m)以上でなければならず、jobu =jobu = job::somevecの場合はmax(1, min(m, n))以上でなければなりません。jobu = jobsvd::vectorsの場合、u には m 行 m 列の直交/ユニタリー行列Uが含まれます。jobu = job::somevecの場合、u にはUの最初のmin(m, n)列 (列ごとに格納された左特異ベクトル) が含まれます。jobu = job::novecまたはjobsvd::vectorsinaの場合、u は参照されません。- vt
VT を含む配列。vt の 2 番目の次元はmax(1, n)以上である必要があります。jobvt = jobsvd::vectorsの場合、vt には n 行 n 列の直交/ユニタリー行列VT/VH が含まれます。jobvt = job::somevecの場合、vt にはVT/VH (行ごとに格納された右特異ベクトル) の最初のmin(m, n)行が含まれます。jobvt = job::novecまたはjobsvd::vectorsinaの場合、vt は参照されません。
例外#
例外 |
説明 |
|---|---|
|
この例外は、計算中に問題が発生した場合にスローされます。例外オブジェクトの get_info() メソッドを使用して、問題の情報コードを取得できます。
|
戻り値#
計算が完了したことを確認するために待機する出力イベント。