我正在用Scipy做一个FEM项目。现在我的问题是
稀疏矩阵的组装太慢。我计算
稠密小矩阵中每个元素的贡献(每个元素一个
元素)。对于全局矩阵的集合,我循环所有的
小稠密矩阵,并按以下方式设置矩阵项:
[i,j] = someList[k][l]
Mglobal[i,j] = Mglobal[i,j] + Mlocal[k,l]
Mglobal
是一个适当大小的lil矩阵,someList
映射
索引变量。在
当然,这是最慢的
装配时间。有没有更好的方法来组装大型稀疏矩阵
从许多小密矩阵?我试过了细纹织物但事实并非如此
似乎可以处理稀疏矩阵
Tags:
我将我的响应发布到scipy邮件列表;堆栈溢出更容易一些 所以我也会把它贴在这里,尽管是一个稍微改进的版本。在
诀窍是使用IJV存储格式。这是三个阵列的三个 其中第一个包含行指示符,第二个包含列指示符,并且 第三个矩阵的值在那个位置。这是最好的办法 建立有限元矩阵(或我认为的任何稀疏矩阵)作为访问 这种格式非常快(只需填充一个数组)。在
在scipy中,这称为
coo_matrix
;该类将三个数组作为 争论。它只对转换成另一种格式(CSR-os)有用 用于快速线性代数。在对于有限元,你可以用一些东西来估计这三个数组的大小 像
所以,如果你有二维二次方,你可以做个数_个元素*36,例如。 这种方法很方便,因为如果你有当地的婚姻你肯定 有全局数字和输入值:正是您需要的构建 三个IJV阵列。Scipy足够聪明,可以抛出0个条目,所以 高估是可以的。在
相关问题 更多 >
编程相关推荐