我有一个大小为
第
由于我将把块状矩阵添加到一个全矩阵中,如果尝试以“稀疏”的方式编写代码,是否会有速度上的提升呢?我一直在反复思考,我的想法正在确定:即使将
MxM
的矩阵S
,对角线上的元素为零,其他位置的元素都不为零。我需要制作一个更大的块状矩阵。这些块的大小将为NxN
,总共会有MxM
个块。第
(i,j)
个块将是S(i,j)I
,其中I=eye(N)
是一个尺寸为NxN
的单位矩阵。这个矩阵肯定是稀疏的,S
有M^2-M
个非零元素,我的块状矩阵将有N(M^2-M)
个非零元素,占据了(NM)^2
的约1/N
%,但我将把它添加到另一个NMxNM
的矩阵中,我不指望它是稀疏的。由于我将把块状矩阵添加到一个全矩阵中,如果尝试以“稀疏”的方式编写代码,是否会有速度上的提升呢?我一直在反复思考,我的想法正在确定:即使将
S
转换为稀疏块状矩阵的代码不是很高效,当我告诉它要将一个全矩阵和一个稀疏矩阵相加时,MATLAB会知道它只需要迭代非零元素吗? 我经常听说for
循环在MATLAB中运行速度较慢,而使用repmat
和用零填充则更快,但我猜最快的方法是根本不构建块状矩阵,而是编写以稀疏方式添加(小矩阵)S
到我的其他(大的、全的)矩阵的代码。如果我学会了如何使用稀疏代码构建块状矩阵(比用全方式构建并传递给函数更快),那么这段代码应该能够以稀疏的方式为我执行加法,而无需构建块状矩阵,对吗?
N
和M
有多大?(注意:我认为您将拥有N*(M^2-M)
个非零条目,而不是M^2-M
个。) - BillBokeeyN=4
和M=6
的情况下,它也只有21%,随着规模的扩大,百分比会越来越小)。问题不在于我的分块矩阵有多稀疏。@zelanix 我要做的操作是将这个稀疏分块矩阵加到一个完整的NMxNM
矩阵中。我可以处理一些玩具问题,但在我花时间学习如何编写高效的稀疏代码之前,我想知道是否有任何优势,因为这可能对我没有任何好处。 - Travis Bemrose