gpt4 book ai didi

python - 将 cupy.linalg.svd 应用于一堆矩阵

转载 作者:行者123 更新时间:2023-11-30 21:56:17 26 4
gpt4 key购买 nike

我想通过 cupy.linalg.svd 对一堆矩阵执行 SVD(奇异值分解),计算每个矩阵的 SVD。

import cupy as cp
arr = cp.random.uniform(size=(1000, 3, 3), dtype=cp.float32)
sing_vals = cp.linalg.svd(arr, compute_uv=False, full_matrices=False)

这给出了一个错误,声称arr不是二维的。显然,cp.linalg.svd 只能计算单个二维矩阵的 SVD。但是,numpy.linalg.svd 总是在数组的最后两个轴上计算 SVD,这要强大得多。

<小时/>

有没有办法在 cupy 中有效计算一堆矩阵的 SVD?

更好的是,有没有一种通用方法可以有效apply_along_axis

最佳答案

CuPy 的当前实现调用 cusolverDn<t>gesvd() ,不支持批量计算。为了实现高效的批量计算,我认为 CuPy 必须调用接收批量输入的 CUDA API。

仅供引用,改进 CuPy,cuSOLVER 有 cusolverDn<t>gesvdjBatched()cusolverDn<t>gesvdaStridedBatched() ,这似乎可以用于批量 SVD(密集一般矩阵)。我不知道 SVD 算法之间的差异。 j代表雅可比方法和 a代表近似值。

关于python - 将 cupy.linalg.svd 应用于一堆矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55516973/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com