首页 > 编程知识 正文

学习日记三:一些坑(矩阵复制,克罗内克积,线性算子等。)编程时踩到的。

时间:2023-05-06 04:56:04 阅读:276316 作者:2679

1、python中对矩阵复制的操作

如果已知矩阵A,想新得到一个矩阵B,B的大小与元素和A完全相同,第一反应会是写:

B=A

然而实际上这样等的话会导致:对矩阵B做操作,A中的内容会跟着一起变。因此正确做法是:

B=A.copy() 2、矩阵B中对角线的元素是矩阵A?

如果已知 A ∈ S n A in {S^n} A∈Sn,要求:

假设有k个矩阵A,则:

B=np.kron(np.eye(k),A) 3、Linear Operator

如果想要实现Au=b,其中A是未知的矩阵,但我们已知矩阵A满足这样一个条件: A x = x ^ Ax = widehat x Ax=x ;
相当于这样一个函数: f ( x ) = x ^ fleft( x right) = widehat x f(x)=x ,我们知道该函数输入输出的对应关系,但要把这样一个对应关系用矩阵A来表达,并且后续要使用这样一个矩阵A。
应该怎么做呢?
我们对A不必要用显式的表达,而是可以利用Linear Operator。
举一个例子,函数f的作用是blur,即相当于一个虚心的高跟鞋卷积,将input的x模糊成 x ^ widehat x x ;那么我们首先定义这样一个blur函数:

def blur(u): # u输入时候是vector,我们首先把它转成矩阵形式 u_Matrix = np.reshape(u, (n, n), 'F') Au = ndimage.convolve(u_Matrix, kernel, mode='constant', cval=0.0) # 用卷积作用在矩阵u上,卷积核为kernel return Au.flatten('F') # 输出为向量形式 A = LinearOperator((N, N), matvec=blur) #引用我们定义的blur函数来生成Linear Operator# 于是A就成了我们要的N*N的矩阵# 并且可以做矩阵的操作,例如:AtA = A.dot(A)等

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。