首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python: scipy.sparse.diags矩阵中的元素分配

Python: scipy.sparse.diags矩阵中的元素分配
EN

Stack Overflow用户
提问于 2015-07-08 16:31:45
回答 1查看 2.8K关注 0票数 0

目前,我正在尝试更改使用scipy.sparse.diags函数创建的矩阵中的一行。但是,它返回以下错误,说明我不能为该对象赋值:

代码语言:javascript
运行
复制
 TypeError: 'dia_matrix' object does not support item assignment

有什么办法可以绕过这一点,而不需要改变原来的向量,用来形成三对角矩阵?以下是我的代码:

代码语言:javascript
运行
复制
def Mass_Matrix(x0):

"""Finds the Mass matrix for any non uniform mesh x0"""

x0 = np.array(x0)
N = len(x0) - 1
h = x0[1:] - x0[:-1]

a = np.zeros(N+1)
a[0] = h[0]/3
for j in range(1,N):
    a[j] = h[j-1]/3 + h[j]/3
a[N] = h[N-1]/3

b = h/6
c = h/6

data = [a.tolist(), b.tolist(), c.tolist()]
Positions = [0,1,-1]
Mass_Matrix = diags(data, Positions, (N+1,N+1))

return Mass_Matrix


def Initial_U(x0): #BC here

x0 = np.array(x0)
h = x0[1:] - x0[:-1]
N = len(x0) - 1

Mass = Mass_Matrix(x0)

Mass[0] = 0 #ITEM ASSIGNMENT ERROR

print Mass.toarray()
EN

Stack Overflow用户

回答已采纳

发布于 2015-07-09 04:23:56

对于用函数定义的稀疏矩阵:

代码语言:javascript
运行
复制
x0=np.arange(10)
mm=Mass_Matrix(x0)

csr格式通常用于计算,如矩阵乘法和直线求解。它确实定义了赋值,但是给出了一个效率警告:

代码语言:javascript
运行
复制
In [29]: mmr=mm.tocsr()

In [30]: mmr[0]=0
/usr/lib/python3/dist-packages/scipy/sparse/compressed.py:690: SparseEfficiencyWarning: Changing the sparsity structure of a csr_matrix is expensive. lil_matrix is more efficient.
  SparseEfficiencyWarning)

lil工作很好

代码语言:javascript
运行
复制
In [31]: mml=mm.tolil()

In [32]: mml[0]=0

许多sparse函数和方法将一种格式转换为另一种格式,以利用它们各自的优势。但是开发人员并没有实现所有可能的组合。您需要阅读各种格式的优缺点,并注意每种格式的方法。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31298518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档