英特尔MKL稀疏矩阵乘法包装器

sparse-dot-mkl的Python项目详细描述


稀疏点mkl

Build StatuscodecovPyPI versionConda version

这是“英特尔MKL库”中稀疏矩阵乘法的包装。 它完全是使用ctypes在本机python中实现的。 MKL的主要优点是多线程稀疏矩阵乘法。 在编写本文时,scipy稀疏实现是单线程的(2020-01-03)。 第二个优点是稀疏矩阵和稠密矩阵的直接相乘,而不需要任何矩阵 中间转换(也是多线程)。在

有三个函数显式可用-dot_product_mklgram_matrix_mkl,和sparse_qr_solve_mkl

dot_product_mkl

{cd5}

matrix_amatrix_b是numpy数组(1d或2d)或scipy稀疏矩阵(CSR、CSC或BSR)。 只有当一个矩阵是稠密数组或两个稀疏矩阵都是BSR时,才支持BSR矩阵进行矩阵乘法。 不支持稀疏COO矩阵。 Numpy数组必须是连续的。在调用此函数之前,应将非连续数组复制到连续数组 功能。在

此包仅适用于浮点数据。 cast=True将通过在必要时创建内部副本将数据转换为双精度浮点。 如果A和B都是单精度浮点数,它们将按原样使用。 cast=False如果输入数组不是双精度或都是单精度,则会引发ValueError。 这默认为False,原则是在没有显式的情况下不应该发生潜在的不安全的数据类型转换 说明。在

输出将是一个密集数组,除非两个输入都是稀疏的,在这种情况下,输出将是稀疏矩阵。 稀疏矩阵输出格式将与左(A)输入稀疏矩阵相同。 dense=True将在稀疏矩阵乘法过程中直接生成密集数组。 dense如果无论如何都要生成密集数组,则没有任何效果。 密集阵列的输出可以是行顺序或列顺序,具体取决于输入顺序。在

copy已弃用,没有任何效果。在

reorder_output=True将对输出矩阵中的稀疏矩阵索引进行排序。 如果输出是密集数组,则没有任何效果。 输入稀疏矩阵可以在没有警告的情况下重新排序。 这不会改变数据,只会改变数据的存储方式。 Scipy矩阵乘法不产生有序输出,因此默认为False。在

out是对密集输出数组的可选引用,矩阵乘法的乘积将被加到其中。 这在属性上必须与不使用时将返回的数组相同。 具体来说,它必须具有正确的形状、数据类型和列或行的主要顺序,并且必须是连续的。如果此数组的任何属性不正确,将引发ValueError。 当设置out时,此函数将返回对同一数组对象的引用。在

如果提供了out,则out_scalar是{}的可选元素级缩放。 它将在添加矩阵乘法之前乘以out,这样 out := matrix_a * matrix_b + out_scalar * out

稀疏解算

sparse_qr_solve_mkl(matrix_a, matrix_b, cast=False, debug=False)

这是一个线性方程组(AX=B)的QR解算器,其中matrix_a是一个稀疏的CSR矩阵 并且matrix_b是一个稠密矩阵。 它将返回密集数组X

cast=True将通过在必要时创建内部副本将数据转换为兼容的浮点。 如有必要,还将CSC矩阵转换为CSR矩阵。在

革兰氏矩阵

gram_matrix_mkl(matrix, transpose=False, cast=False, dense=False, debug=False, reorder_output=False)

这将计算矩阵A的gram矩阵ATA,其中矩阵A是稠密的或稀疏的CSR矩阵。 它将返回生成的对称矩阵的上三角部分。 如果A是稀疏的,它将返回一个稀疏矩阵,除非设置了dense=True。在

transpose=True将返回AAT

reorder_output=True将在输出矩阵中排序稀疏矩阵索引。在

cast=True将通过在必要时创建内部副本将数据转换为兼容的浮点。 它还将转换如有必要,将CSC矩阵转换为CSR矩阵。在

要求

此包需要MKL运行时链接库libmkl_rt.so (对于OSX,libmkl_rt.dylib,对于WIN,mkl_rt.dll)。 如果无法加载MKL库,则在首次导入包时将引发ImportError。 MKL与conda的完整版本一起发布, 并且可以用conda install -c intel mkl安装到Miniconda中。 或者,您可以将MKL共享对象的路径添加到LD_LIBRARY_PATH (例如export LD_LIBRARY_PATH=/opt/intel/mkl/lib/intel64:$LD_LIBRARY_PATH)。 MKL v2019中存在一些已知错误,可能会导致间歇性分段故障。 如果遇到任何问题,强烈建议更新到MKL v2020。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JFrame中的Java多线程   java Servlet异常映射   java无法从输出流读取   swing Java带来的小程序GUI问题   java什么原因导致错误“'void'类型此处不允许”以及如何修复它?   Java选择器select(长)与selectNow的区别   java自定义arraylist<mygames>获得不同   java Icepdf注释让页面消失   java反向整数数组   java I在生成同步“无法解析配置的所有依赖项”时遇到此错误:app:debugRuntimeClasspath   多个虚拟机上的java线程访问单个DB实例上的表,有时会导致性能低下和异常   swing更改Java中的默认按钮,使其看起来“更好”   java慢速MQ主题订阅。并行化不能提高性能   java运行Boggle Solver需要一个多小时。我的代码怎么了?   数据库中的java循环与应用程序中的java循环   正则表达式匹配${123…456}并在Java中提取2个数字?   java如何制作我们软件的试用版   Java内存参数计算   从另一个类调用方法时出现java问题