首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

稀疏矩阵对角化的快速方法(julia):为什么arpack如此缓慢?

稀疏矩阵对角化是在数值计算和线性代数中的一个重要问题。对于稀疏矩阵,其大部分元素为零,只有少数非零元素。由于稀疏矩阵的特殊性质,传统的对角化方法在处理稀疏矩阵时效率较低,因此需要一种快速的方法来解决这个问题。

在Julia语言中,arpack是一个常用的用于稀疏矩阵对角化的库。然而,有时候我们会发现arpack的运行速度较慢,这主要有以下几个原因:

  1. 稀疏矩阵的存储方式:稀疏矩阵通常采用压缩稀疏列(CSC)或压缩稀疏行(CSR)的方式进行存储。这种存储方式在访问非零元素时效率较高,但在进行矩阵乘法等操作时可能会导致内存访问的不连续性,从而影响计算速度。
  2. 矩阵规模:当稀疏矩阵的规模较大时,arpack需要进行大量的迭代计算,这会导致计算时间较长。
  3. 算法选择:arpack使用的是迭代方法来求解特征值和特征向量,这种方法在某些情况下可能会收敛较慢。

为了提高稀疏矩阵对角化的速度,可以考虑以下方法:

  1. 选择合适的稀疏矩阵存储格式:根据具体的应用场景和计算需求,选择合适的稀疏矩阵存储格式,如CSR、CSC、COO等,以提高内存访问效率。
  2. 使用并行计算:利用多线程或分布式计算的方式,将计算任务分解并行处理,以加快计算速度。
  3. 优化算法参数:调整arpack算法的参数,如迭代次数、收敛条件等,以提高算法的收敛速度。
  4. 使用其他稀疏矩阵对角化方法:除了arpack,还有其他一些稀疏矩阵对角化的方法,如Lanczos算法、Jacobi-Davidson算法等,可以尝试使用这些方法来加速计算。

总之,稀疏矩阵对角化是一个复杂且计算密集的问题,arpack在某些情况下可能会较慢。为了提高计算速度,可以采取合适的稀疏矩阵存储格式、并行计算、优化算法参数等方法。在Julia语言中,除了arpack,还可以尝试其他稀疏矩阵对角化的方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Windows环境下编译电磁仿真求解器Palace

尽管Palace功能强大,但作为一款基于Linux开发科学计算程序,官方并没有提供Windows操作系统完全支持。...我们需要通过手动建立Visual Studio项目的方法,完成编译。...libCEED:是一款线性代数计算管理终端,支持各种CPU,GPU和集群并行计算。SuperLU_DIST:SuperLU并行版本,是一个并行稀疏直接线性代数求解器库。...STRUMPACK:一款大规模稀疏矩阵直接数值计算开源软件库。MUMPS:来自法国求解大规模稀疏线性方程组开源软件库。SLEPc:支持复数线性矩阵计算,用于特征值计算。需要基于PETSc编译。...ARPACK-NG:支持复数线性矩阵计算,用于特征值计算。以F77程序为主,无需依赖PETSc,可以独立编译。GSLIB:用于高阶谱单元插值计算,可选。

27560
  • 用scikit-learn研究局部线性嵌入(LLE)

    这里我们就scikit-learn中流形学习一些算法做一个介绍,并着重其中LLE算法使用方法做一个实践上总结。...这个算法使用了图论方法,用样本构成无向图对应拉普拉斯矩阵作特征分解来降维。具体方法和我们在谱聚类(spectral clustering)原理总结里面讲到基本相同。     ...当近邻数远远大于降维到维数时可以考虑适当增大这个参数。     4)eigen_solver:特征分解方法。有‘arpack’和‘dense’两者算法选择。...当然也可以选择'auto'让scikit-learn自己选择一个合适算法。‘arpack’和‘dense’主要区别是‘dense’一般适合于非稀疏矩阵分解。...而‘arpack’虽然可以适应稀疏和非稀疏矩阵分解,但在稀疏矩阵分解时会有更好算法速度。当然由于它使用一些随机思想,所以它解可能不稳定,一般需要多选几组随机种子来尝试。

    84520

    Julia 为你王冠而来

    缓慢运行速度,需要过多测试来保证代码正确性 ,再到尽管已经进行了测试但仍然会产生运行时错误,这些都足以让人时常产生抛弃Python想法。...这也是为什么越来越多程序员开始使用其他语言原因ーー顶尖程序员通常使用Julia、 Go 和 Rust。Julia 擅长数学和技术任务,而 Go 则擅长模块化程序,Rust 是系统编程首选。...Although that way may not be obvious at first unless you're Dutch.尽管这方法一开始并非如此直观,除非你是荷兰人。...命名空间是个绝妙主意,我们应好好利用它。 Python 仍然保留了 ABC 良好特性: 例如可读性、简单性和初学者很友好。但是 Python 比 ABC 更加健壮,更加适应现实生活。...但那些在当时学到这一点的人才是今天巨人ーー他们薪水需求如此之高,以至于可以与美国橄榄球联盟球员相媲美。 ?

    60830

    再见Python,你好Julia

    但如果你曾与这些人坐下来聊过天,你也会知道他们 Python 缺陷有多大怨言。速度缓慢,需要过多测试,就算做过了测试也会冒出来运行时错误……让人头疼事情实在太多了。...这就是为什么越来越多程序员开始采用其他语言原因所在——其中最优秀替代品包括 Julia、Go 和 Rust。...稀疏胜于密集。可读性很重要。特殊情况还不足以打破规则。而实用性胜于纯度。[……] Python 仍然保留了 ABC 那些良好特性:例如可读性、简单性和初学者友好优点。...但当时就了解它那些人成为了今天大牛——市场大牛需求如此火热,以至于他们薪水足以匹敌 NFL 球员。 同样,Julia 现在也还是很小众。...但是,如果企业 Python 需求衰退,Python 程序员比例也会下降。起初这种趋势是很缓慢,但也是不可逆转。 另一方面,如果你可以把 Julia 纳入自己简历,就会取得真正优势。

    73640

    有人说Julia比Python好,还给出了5个理由

    需要注意是,Julia 语言更多地基于函数范式。此外,Julia 语言虽不如 Python 那么流行,但在数据科学中使用 Julia 具有很大优势,从而使它在很多情况下成为更好编程语言选择。...不仅如此,使用 Julia 多重派发还可以实现函数扩展,这对于包扩展来说好处多多,因为无论什么时候显式地导入 method,用户都可以对它进行更改。...原生 Python 只能缓慢完成线性代数,而原生 Julia 可以飞快地完成。这是因为,Python 最开始并不是开发来用于支持与机器学习相关所有矩阵和方程运算。...使用 Julia 语言能够更快速、更容易地完成大多数线性代数运算,如以下代码所示: Python -> y = np.dot(array1,array2) R -> y <- array1 * array2...但是对于拥有数百万个观察结果数据集,用 Python 读取数据都会变成一件难事。 总之,我 Julia 未来满怀期待。Julia 写起来很有趣,而且在未来数据科学领域可能会变得更加实用。

    92520

    Python正在慢慢褪色

    虽然Python在数据科学和机器学习领域占主导地位,甚至是科学和数学计算领域主角,但与Julia、Swift和Java等语言相比,它确实有些欠缺。 为什么Python如此受欢迎?...Python“缓慢主要原因,可以归结为以下两点----首先,Python是解释性语言,而不是编译型语言,这终究会导致执行时间缓慢;其次,它是一种动态语言 (变量数据类型在执行期间由Python...初学者经常“Python的确太慢”说法产生争议,事实上,的确如此,但也并非完全这样。...一样互操作性;由于它支持LLVM编译器工具链,Swift几乎和C一样快;Julia提供了用于I/O(输入/输出)密集任务异步I/O,而且速度惊人。...结论 Python并非最好编程语言,它无法取代C/C++和Java。它被打造成一种通用编程语言,强调可读性、以英语为中心语法。人们利用它可以快速开发程序和应用程序。

    56330

    另一个角度看矩阵分析

    从这一点来说,数量函数向量(矩阵)求导实际上是(矩阵导数有其严格定义,此处不做说明) ? 所以这个最简单例子求导结果是 ?...那么,回到本节标题,矩阵计算根本是什么?矩阵提供了一种更简洁描述问题方式,采用矩阵这一方法表示问题进行计算时,对于矩阵有一套相应运算规则,这就是矩阵计算。...再扩展开一点,包括矩阵序列、级数和函数计算也遵循这一思路。 3. 空间——让矩阵不仅仅是矩阵 矩阵存在意义难道仅仅只在于给出公式更有利表示和简单计算方法?...酉对角化求得 ? 奇异值分解。 也就是说,在相似对角化基础上进行约束或是妥协,尽可能发现矩阵特征。所以矩阵很多内容在讲对角化,目的大抵如此。 5....而学习过程中多问几个为什么为什么要做这样做以及这样做好处是什么,学习将会是大有裨益。 本文如有什么错误或是不足,还请大家指正。而且居然还总结不下去了……

    74520

    第一性原理之美:从平移对称性导出卷积

    0到n-1,并n取模。...它可以通过堆叠向量w平移向量(n取模)来形成。因此,这里使用符号C(w)来指代由向量w形成循环矩阵。...由于所有循环矩阵都可以联合对角化,因此它们也可以通过傅里叶变换进行对角化。循环矩阵仅在特征向量上有所区别。最后一个常被忽视点是:C(w)特征值是向量w傅里叶变换。...此处矩阵C通过傅里叶变换“对角化”,指的是矩阵Φ*CΦ是对角。由于傅里叶变换是一个正交矩阵(Φ*Φ= I),因此在几何上,它起着相当于n维旋转坐标系变化作用。...因为Φ具有特殊冗余结构,所以可以用快速傅里叶变换(FFT)算法以?(n log n)复杂度将Φ*x和Φx结果计算出来。 为什么卷积这个定义如此重要、并需要通过这种方式进行讲解呢?

    1.2K30

    Julia 1.0 正式发布,这是新出炉一份简单中文教程

    也许一开始你这个 end 不是很喜欢,或许会问为什么不像 Python 一样呢?为什么不用 {} 呢?别着急后面在元编程部分告诉你 end 好处。...这表现为 Julia 拥有大量针对不同情况设计数组类型,例如:可共享数组,供并行计算使用;静态数组,适合给小数组加速;稀疏数组,实现上目前只有稀疏矩阵;分布式数组,用于分布式计算;CUDA 数组...但是等等,还不止如此Julia 多维数组支持是非常好,Comprehension 对于多维数组也可以用,用逗号分隔即可 [(i, j) for i in 1:5, j in 1:6] 5...思考一下下面这段代码运行结果 类型在 Julia 里是非常廉价,利用多重派发和廉价类型,我们可以针对数学对象实现更详细优化,例如对于满足不同性质矩阵,我们有它们之间互相乘积优化方法...,我们可以将部分操作作为懒惰求值(Lazy Evaluation)加入运算中,然后再为满足不同性质矩阵派发精细优化方法满足 ATA=I 矩阵,如果遇到了自己转置可以什么都不算 满足上三角矩阵

    5K20

    如何优化一个传统分析方法还发了14分

    因此,需要一些快速且高效存储PCA算法,实际计算时间和存储效率在很大程度上取决于特定实现,包括编程语言,加载输入文件方法以及数据格式。...halko / algorithm971(Julia,OnlinePCA.jl)等核心实现中大脑矩阵通过次数。...结果显示计算时间与实施通过次数相关,二进制化和数据压缩大大加快了计算时间。并且,稀疏矩阵使用可能加快scRNA-seq数据集计算时间。 6....除了数据矩阵大小,作者还根据实现加载数据方式(内存中或内核外)以及输入矩阵格式(密集或稀疏,按行,图8)实现方式进行了分类。...所有命令都在快速且高效内存Julia包中实现; 最后,作者为最终用户和软件开发人员提出准则作者基准测试表明,以选择合适PCA实施方案,一些基于Krylov子空间和随机奇异值分解PCA算法比其他算法更快

    82620

    机器学习降维之主成分分析(PCA)

    数据如下图所示,我们希望找到某一个维度方向,它可以代表这两个维度数据。图中列了两个向量,也就是u1和u2,那么哪个向量可以更好代表原始数据集呢? ? 直观上看u1比u2更好,为什么呢?...我们可知选择不同基能够一组数据给出不同表示,同时当基数量少于原始样本本身维数时,则可以达到降维效果,矩阵表示如下 ? 2.2 方差 ? 那么考虑,如何选择一个方向或者基才是最优呢?...2.5 协方差矩阵角化 ? 我们来看看原数据协方差矩阵和通过基变换后协方差矩阵之间关系。设原数据协方差矩阵为C,P是一组基按行组成矩阵,设Y=PX,则Y为XP做基变换后数据。...设Y协方差矩阵为D,我们来推导一下D和C关系 ? 可以看出,我们目标是寻找能够让原始协方差矩阵角化P。换句话说,优化目标变成了寻找一个矩阵P,满足PCP^T是一个对角矩阵。...为了克服PCA一些缺点,出现了很多PCA变种,比如解决非线性降维KPCA,还有解决内存限制增量PCA方法Incremental PCA,以及解决稀疏数据降维PCA方法Sparse PCA等。

    95120

    简单易学机器学习算法——谱聚类(Spectal Clustering)

    网络簇是整个网络中稠密连接分支,具有同簇内部节点之间相互连接密集,不同簇节点之间相互连接稀疏特征。 3、复杂网络分类     复杂网络主要分为:随机网络,小世界网络和无标度网络。...二、谱方法介绍 1、谱方法思想     在复杂网络网络簇结构存在着同簇节点之间连接密集,不同簇节点之间连接稀疏特征,是否可以根据这样特征网络中节点进行聚类,使得同类节点之间连接密集,不同类别节点之间连接稀疏...3、Laplacian矩阵性质 image.png 4、不同Laplacian矩阵     除了上述拉普拉斯矩阵,还有规范化Laplacian矩阵形式: ?...2、多类别聚类    image.png 六、谱聚类过程 1、基本结构    image.png 2、利用相似度矩阵构造方法    image.png 七、实验代码 1、自己实现一个 #coding...:谱聚类过程相当于先进行一个非线性降维,然后在这样低维空间中再利用聚类方法进行聚类。

    2.4K70

    超原版速度110倍,针对PyTorchCPU到GPU张量迁移工具开源

    比如训练词嵌入时,计算是在 CPU 上进行,然后需要将训练好词嵌入转移到 GPU 上进行训练。 在这一过程中,张量迁移可能会变得非常缓慢,这成为了机器学习训练一个瓶颈。...嵌入系统采用稀疏训练,只有一部分参数参与前馈/更新操作,剩余参数处于闲置状态。所以作者想到,为什么不在训练过程中关闭这些闲置参数呢?这就需要快速 CPU→GPU 数据迁移能力。...之前只有 SpraseAdam、Adagrad 和 SGD 适合稀疏嵌入训练。 那么,能够实现如此惊人加速库是怎么实现呢?...只要用兼容 CuPy 代码替换 Numpy 代码,用户就可以实现 GPU 加速。 CuPy 支持 Numpy 大多数数组运算,包括索引、广播、数组数学以及各种矩阵变换。...有了这样强大底层支持,再加上一些优化方法,SpeedTorch 就能达到 110 倍速度了。 使用方法 SpeedTorch 可以通过 pip 安装。

    1.5K20

    Julia开源新框架SimpleChain:小型神经网络速度比PyTorch快5倍!

    比如对于一个特定问题,如果需要稀疏小模型,想要获得最高性能方法就是重写一遍,而非采用通用框架。...从黑洞动力学到地震安全建筑开发,SciML方法有效性已经在许多学科中得到证实,能够灵活地发现/指导(生物)物理方程。...但同样,在小网络情况下,由于缺乏并行计算,使用GPU内核性能可能还不如设计良好CPU内核。 矩阵操作只有在能够使用批处理(A*B中B矩阵每一列都是一个单独批处理)时才会发生。...基于这些想法,研究人员开源了SimpleChains.jl,可以很好地解决这类优化问题,可以在CPU上快速拟合和优化小模型,早期神经网络原型模型设计大多都希望: 1....开发人员长期目标是将这种循环编译器优化方法扩展到自动产生pullbacks。但这种以编译器为中心方法已经被用于实现便利性:虽然我们仍然需要手写梯度,但我们不需要对它们进行手工优化。

    86740

    Julia开源新框架SimpleChain:小型神经网络速度比PyTorch快5倍!

    比如对于一个特定问题,如果需要稀疏小模型,想要获得最高性能方法就是重写一遍,而非采用通用框架。...从黑洞动力学到地震安全建筑开发,SciML方法有效性已经在许多学科中得到证实,能够灵活地发现/指导(生物)物理方程。...但同样,在小网络情况下,由于缺乏并行计算,使用GPU内核性能可能还不如设计良好CPU内核。 矩阵操作只有在能够使用批处理(A*B中B矩阵每一列都是一个单独批处理)时才会发生。...基于这些想法,研究人员开源了SimpleChains.jl,可以很好地解决这类优化问题,可以在CPU上快速拟合和优化小模型,早期神经网络原型模型设计大多都希望: 1....开发人员长期目标是将这种循环编译器优化方法扩展到自动产生pullbacks。但这种以编译器为中心方法已经被用于实现便利性:虽然我们仍然需要手写梯度,但我们不需要对它们进行手工优化。

    1.3K30

    超详细解读ORB-SLAM3单目初始化(下篇)

    ,建立起知识树,以把零碎知识点串联起来,方便快速学习提升自己。...,后者利用构建虚拟相机模型,针对不同相机计算基础矩阵和单应性矩阵,选取最佳模型来恢复出最开始两帧之间相对姿态,并进行三角化得到初始地图点。...第一是利用基础矩阵F和本质矩阵E关系 ,计算出四组解。第二是调用函数CheckRT作用是用R,t来特征匹配点三角化,并根据三角化结果判断R,t合法性。...在已经有的粗解基础上利用统计学方法进行分析,筛选出优质点(符合概率模型内点)来构成我们最终使用一个投影最优解,利用两帧图像上匹配点进行相互投影,综合判断内外点,从而最小化误差。...筛选出内外点之后,两个模型进行打分,选出最优模型,然后通过三角化测量进行深度估计,最终完成初始化过程。

    2.7K23

    独家 | 由第一原理导出卷积

    循环矩阵满足交换率,它足以表明移位交换性(在[5]中引理3.1): 当且仅当矩阵移位满足交换率时,称矩阵是循环。...由于Φ具有特殊冗余结构,Φ*x和Φx乘积可以用快速傅里叶变换(FFT)算法复杂度 ? 计算。 为什么要这样来定义卷积?...在这里我将重复Helvetius名言:“某些原则了解很容易弥补某些事实缺乏”。对于卷积而言,它从第一原则推导更加容易推广到其他领域。...英文名称卷积来自拉丁语con(“在一起”)和volvere(“卷起”),是德语Faltung直译,俄罗斯变体свертка也是如此。...[10]然而,由于S是不对称,所以它没有实特征值(对称实矩阵有实特征值)。S特征值恰好是一个复根。 [11]当称矩阵C被傅里叶变换“对角化”时,意思是矩阵Φ*CΦ是对角化

    82720

    简单易学机器学习算法——谱聚类(Spectal Clustering)

    二、谱方法介绍 1、谱方法思想     在复杂网络网络簇结构存在着同簇节点之间连接密集,不同簇节点之间连接稀疏特征,是否可以根据这样特征网络中节点进行聚类,使得同类节点之间连接密集,不同类别节点之间连接稀疏...个特征向量,可以利用K-Means聚类方法其进行聚类,若前 ? 个特征向量为 ? ,这样便由特征向量构成如下特征向量矩阵: ?...将特征向量矩阵每一行最为一个样本,利用K-Means聚类方法其进行聚类。 六、谱聚类过程 1、基本结构     基于以上分析,谱聚类基本过程为: 对于给定图 ? ,求图矩阵 ?...特征向量矩阵; 利用K-Means聚类算法对上述 ? 特征向量矩阵进行聚类,每一行代表一个样本点。 2、利用相似度矩阵构造方法    上述方法是通过图矩阵 ? 和邻接矩阵 ?...来构造Laplacian矩阵,也可以通过相似度矩阵方法构造Laplacian矩阵,其方法如下:    相似度矩阵是由权值矩阵得到: ? 其中 ? 再利用相似度矩阵 ?

    67950

    走过19年,每年千万下载量,科学计算开源库SciPy前世今生

    SciPy 发展里程碑 20 世纪 90 年代末期,美国梅奥医学中心博士生 Travis Oliphant 发布了一系列构建于数值数组之上包,并提供了用于信号处理、特殊函数、稀疏矩阵、正交、最优化和快速傅里叶变换等算法...我们可以用更少算力运行更大矩阵计算,用更精简方式拟合更复杂与多样概率分布,也可以跑一跑最新最优化方法。研究者在这篇论文中着重介绍了 SciPy 一路走来关键技术。...数据结构:稀疏矩阵 scipy.sparse 提供了 7 种稀疏矩阵数据结构,或者称之为稀疏格式。其中最重要一种是压缩行/压缩列稀疏格式,它们分别为 CSR 与 CSC。...这两种方法都提供了快速主轴索引与快速矩阵-向量乘法,这两种稀疏格式在 SciPy 及依赖库中得到了广泛应用。...整个 cKDTree 模块通过模板化类用 C++重写了,并新增周期性边界条件支持,它经常用于物理过程模拟。

    89831
    领券