首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用cuSOLVER计算奇异值分解

用cuSOLVER计算奇异值分解
EN

Stack Overflow用户
提问于 2015-10-30 02:45:14
回答 1查看 1.3K关注 0票数 1

我正试图为cuSOLVER函数使用scikit-cuda的包装器,特别是我想要执行cusolverDnSgesvd来在实数矩阵上计算完全矩阵的单精度SVD。

使用代码这里这里作为参考,我设法做到了以下几点:

代码语言:javascript
运行
AI代码解释
复制
import pycuda.autoinit
import pycuda.driver as drv
import pycuda.gpuarray as gpuarray
import numpy as np

from skcuda import cusolver


handle = cusolver.cusolverDnCreate()

m = 50
n = 25

a = np.asarray(np.random.random((m, n)))
a_gpu = gpuarray.to_gpu(a)

ldu = m
ldvt = n

s_gpu = gpuarray.empty(min(m, n), np.float32)
u_gpu = gpuarray.empty((ldu, m), np.float32)
vh_gpu = gpuarray.empty((n, n), np.float32)

work_size = cusolver.cusolverDnSgesvd_bufferSize(handle, m, n)

work = gpuarray.empty((m,n), np.float32)

u_gpu, s_gpu, vh_gpu = cusolver.cusolverDnSgesvd(
    handle=handle,
    jobu='A',
    jobvt='A',
    m=m,
    n=n,
    A=a,
    lda=m,
    S=s_gpu,
    U=u_gpu,
    ldu=ldu,
    VT=vh_gpu,
    ldvt=ldvt,
    Work=work,
    Lwork=work_size,
    rwork=None,
    devInfo=0
)

但是代码不起作用,可能是因为我搞砸了类型。

代码语言:javascript
运行
AI代码解释
复制
Traceback (most recent call last):
  File "/home/vektor/PycharmProjects/yancut/test_svd.py", line 44, in <module>
    devInfo=0
  File "/home/vektor/anaconda3/lib/python3.4/site-packages/skcuda/cusolver.py", line 577, in cusolverDnSgesvd
    int(A), lda, int(S), int(U),
TypeError: only length-1 arrays can be converted to Python scalars

我应该如何提供所有的参数,以便以适当的方式执行SVD?

UPDATE1:在使用问题作为参考之后,我编辑了代码,并得到了一个新的错误。

代码语言:javascript
运行
AI代码解释
复制
import pycuda.autoinit
import pycuda.driver as drv
import pycuda.gpuarray as gpuarray
import numpy as np

import ctypes

from skcuda import cusolver

rows = 20
cols = 10

a = np.asarray(np.random.random((rows, cols)))
a_gpu = gpuarray.to_gpu(a.copy())
lda = rows

u_gpu = gpuarray.empty((rows, rows), np.float32)
v_gpu = gpuarray.empty((cols, cols), np.float32)
s_gpu = gpuarray.empty(cols, np.float32)
devInfo = gpuarray.zeros(1, np.int32)

handle = cusolver.cusolverDnCreate()

worksize = cusolver.cusolverDnSgesvd_bufferSize(handle, rows, cols)
print("SIZE", worksize)

Workspace = gpuarray.empty(worksize, np.float32)

svd_status = cusolver.cusolverDnSgesvd(
    handle=handle,
    jobu='A',
    jobvt='A',
    m=rows,
    n=cols,
    A=a_gpu.ptr,
    lda=rows,
    S=s_gpu.ptr,
    U=u_gpu.ptr,
    ldu=rows,
    VT=v_gpu.ptr,
    ldvt=cols,
    Work=Workspace.ptr,
    Lwork=worksize,
    rwork=Workspace.ptr,
    devInfo=devInfo.ptr
)
status = cusolver.cusolverDnDestroy(handle)

我又犯了一个新错误

代码语言:javascript
运行
AI代码解释
复制
Traceback (most recent call last):
  File "/home/vektor/PycharmProjects/yancut/test_svd.py", line 53, in <module>
    devInfo=devInfo.ptr
  File "/home/vektor/anaconda3/lib/python3.4/site-packages/skcuda/cusolver.py", line 579, in cusolverDnSgesvd
    Lwork, int(rwork), int(devInfo))
ctypes.ArgumentError: argument 2: <class 'TypeError'>: wrong type

现在看来我对devInfo做了些错事

EN

回答 1

Stack Overflow用户

发布于 2015-10-30 04:22:49

文档看,每个矩阵(所以ASUVT)都需要作为设备指针传递。因此,对于PyCUDA gpuarrays,传递A.ptr而不是A。等等,它应该能工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33434101

复制
相关文章
【转载】奇异值分解(SVD)计算过程示例
奇异值分解是线性代数中一种重要的矩阵分解方法,这篇文章通过一个具体的例子来说明如何对一个矩阵A进行奇异值分解。
marsggbo
2018/12/28
3K0
奇异值分解
最近两天都在看奇异值分解及其在推荐系统和图像压缩方面的应用,这部分知识比较散也比较难理解,看代码不是很好懂,所以通过编学边整理的方式帮助大脑理解这部分知识。 奇异值分解是什么 奇异值分解(Sin
刘开心_1266679
2018/04/17
8000
奇异值分解
奇异值分解(SVD)
奇异值分解(Singular Value Decomposition,简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域。是很多机器学习算法的基石。
AngelNH
2020/07/15
9350
奇异值分解(SVD)
奇异值分解SVD
矩阵分解在机器学习领域有着广泛应用,是降维相关算法的基本组成部分。常见的矩阵分解方式有以下两种
生信修炼手册
2021/04/14
9200
奇异值分解(SVD)
最近两天都在看奇异值分解及其在推荐系统和图像压缩方面的应用,这部分知识比较散也比较难理解,看代码不是很好懂,所以通过编学边整理的方式帮助大脑理解这部分知识。 SVD思维导图 奇异值分解是什么 奇异值
用户1332428
2018/03/08
1.6K0
奇异值分解(SVD)
奇异值分解 SVD
奇异值分解(Singular Value Decomposition,SVD)可以用于降维算法中特征分解,还可以用于推荐系统以及自然语言处理等领域。
yangzelong
2019/03/26
5920
奇异值分解 SVD
奇异值分解(SVD)原理
的图片,如果以像素值作为特征,那么每张图片的特征维度是10000。当进行PCA降维时,难点在于我们构造协方差矩阵时,维度达到
Coggle数据科学
2019/09/12
2.1K0
奇异值分解(SVD)原理
矩阵的奇异值分解
奇异值分解(singular value decomposition, SVD),是将矩阵分解成奇异值(singular vector)和奇异值(singular value)。通过奇异值分解,我们会得到一些与特征分解相同类型的信息。然而,奇异值分解有更广泛的应用,每个实数矩阵都有一个奇异值,但不一定都有特征分解。例如,非方阵的矩阵没有特征分解,这时我们只能使用奇异值分解。
狼啸风云
2019/09/18
1.1K0
矩阵的奇异值分解
矩阵的奇异值分解
设A\in C^{m\times n},则矩阵A^{H}A的n个特征值\lambda _i的算术平方根\delta _{i}=\sqrt {\lambda _i}叫做A的奇异值(Singular Value )。
卡尔曼和玻尔兹曼谁曼
2019/01/22
1K0
【技术分享】奇异值分解
  在了解特征值分解之后,我们知道,矩阵A不一定是方阵。为了得到方阵,可以将矩阵A的转置乘以该矩阵。从而可以得到公式:
腾讯云TI平台
2020/03/25
8740
用边缘计算扩展云计算的边界
随着互联网的发展,业务场景往往是复杂和创新的。不断增长和最终的体验要求带来了对架构和成本优化的需求。以前比较简单的中心终端架构无法管理网络性能和业务流量压力,需要多级中心边缘终端架构。
静一
2018/12/29
2K0
机器学习基础:奇异值分解(SVD)
奇异值分解(Singular Value Decomposition)是线性代数中一种重要的矩阵分解,也是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域。
统计学家
2022/05/26
6410
机器学习基础:奇异值分解(SVD)
奇异值分解(Singular Value Decomposition,SVD)
Am×n=UΣVTUUT=ImVVT=InΣ=diag(σ1,σ2,...,σp)σ1≥σ2≥...≥σp≥0p=min⁡(m,n)A_{m \times n} = U \Sigma V^T\\ UU^T=I_m\\ VV^T=I_n\\ \Sigma=diag(\sigma_1,\sigma_2,...,\sigma_p) \\ \sigma_1\ge \sigma_2 \ge...\ge\sigma_p \ge0\\ p=\min(m,n)Am×n​=UΣVTUUT=Im​VVT=In​Σ=diag(σ1​,σ2​,...,σp​)σ1​≥σ2​≥...≥σp​≥0p=min(m,n)
Michael阿明
2020/07/13
1.4K0
降维算法: 奇异值分解SVD
总所周知,在低维下,数据更容易处理,但是在通常情况下我们的数据并不是如此,往往会有很多的特征,进而就会出现很多问题:
数据科学工厂
2023/03/21
7480
降维算法: 奇异值分解SVD
奇异值分解 SVD 的数学解释
本文介绍了奇异值分解(SVD)在机器学习和深度学习领域中的应用,包括图像压缩、去噪、降维等方面。SVD是一种矩阵分解方法,能够将矩阵分解为三个矩阵的乘积,从而可以用于计算图像压缩、去噪、降维等任务中的奇异值。同时,SVD也可以用于深度学习中的特征值分解,从而帮助机器学习算法更好地理解数据。
Alan Lee
2018/01/02
1.5K0
奇异值分解 SVD 的数学解释
用python计算圆面积
print(‘圆的面积为:{,2f}’.format(3.14*int(r)**2))
算法与编程之美
2023/10/25
2360
用python计算圆面积
云计算、雾计算、边缘计算 把这些“计算”混着用会怎样
物联网在飞速发展的同时也产生了大量数据,面对数据处理压力,各种“计算”层出不穷,云计算、雾计算、边缘计算等名词纷纷涌出,那这些计算方式有何区别?应用于哪些场景?在不同场景或同一场景的不同情况下又要如何选择计算方式?
边缘计算
2019/08/05
1.5K0
云计算、雾计算、边缘计算 把这些“计算”混着用会怎样
用Gaussian做CASSCF计算
完全活性空间自洽场(complete active space self-consistent field, CASSCF)是一种组态相互作用(configuration interaction, CI)方法。以下我们用尽可能简单的语言阐述CI方法的核心原理,不涉及复杂的数学公式。在处理氢分子时,如果基态组态σ1s2和一定量的激发组态σ*1s2混合,会使体系能量降低,也就意味着改进了基态波函数,这种方法称为CI方法。在CI中,可以有多个激发组态参加。full CI就是在所选基组范围内,考虑所有可能的激发组态。一般情况下,full CI是不现实的,需要对组态进行截断,如只考虑单激发组态则称为CIS方法,再加入双激发组态则为CISD方法。此类CI方法中,只将各组态的组合系数进行变分优化。若在计算时,同时优化组态系数和各组态基函数的系数(也即分子轨道系数),则称为多组态自洽场(multi-configuration self-consistent field, MCSCF)方法。在MCSCF方法中,自然也是考虑越多的组态则结果越精确,但同时计算量也越大。CASSCF就是其中一种方法,将分子轨道分为三组。能量低的占据轨道和能量高的虚轨道不参与CI计算,剩下的为活性空间,通常由HF计算得到的若干前线轨道或在所研究问题中变化显著的轨道组成。参加CI计算的组态包括电子在活性空间中全部可能的组态。合理地选择活性轨道空间是CASSCF计算中的关键。CASSCF活性空间选取实例见《激发态计算之如何选取特定的分子轨道作为活性空间》一文。
用户7592569
2020/09/01
10.1K1
用Gaussian做CASSCF计算
矩阵奇异分解奇异值分解定理
定理 设 非奇异,则存在正交矩阵P和Q,使得 其中 证明 因为A非奇异,所以 为实对称正定矩阵,于是存在正交矩阵Q使得, 为 的特征值 设x为非0特征向量,因为
用户1733462
2018/06/01
1.7K0
用GPU进行TensorFlow计算加速
TensorFlow程序可以通过tf.device函数来指定运行每一个操作的设备,这个设备可以是本地的CPU或者GPU,也可以是某一台远程的服务器。但在本文中只关心本地的设备。TensorFlow会给每一个可用的设备一个名称,tf.device函数可以通过设备的名称来指定执行运算的设备。比如CPU在TensorFlow中的名称为/cpu:0。在默认情况下,即使机器有多个CPU,TensorFlow也不会区分它们,所有的CPU都使用/cpu:0作为名称。而一台机器上不同GPU的名称是不同的,第n个GPU在TensorFlow中的名称为/gpu:n。比如第一个GPU的名称为/gpu:0,第二个GPU名称为/gpu:1,以此类推。
博文视点Broadview
2020/06/11
2K0

相似问题

用PyCUDA实现cuSOLVER的接口

17

cuSOLVER在许多矩阵上自动并行计算?

12

用奇异值分解法计算最佳拟合平面方程的误差

11

用cuSolver计算一般矩阵的逆最有效的方法是什么?

12

在ILnumerics中计算奇异值分解

16
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文