标签: matrix-inverse

如何检查矩阵在R语言中是否有反转

如何确定矩阵在R中是否有倒数?

因此在R中有一个带矩阵输入的函数,会返回一些像:

" TRUE "(此矩阵具有反转)/" FALSE "(它没有......).

r matrix-inverse

9
推荐指数
3
解决办法
1万
查看次数

有没有办法用numpy有效地反转矩阵数组?

通常我会在for循环中反转一个3x3矩阵的数组,如下例所示.不幸的是for循环很慢.有没有更快,更有效的方法来做到这一点?

import numpy as np
A = np.random.rand(3,3,100)
Ainv = np.zeros_like(A)
for i in range(100):
    Ainv[:,:,i] = np.linalg.inv(A[:,:,i])
Run Code Online (Sandbox Code Playgroud)

python numpy linear-algebra matrix-inverse

8
推荐指数
2
解决办法
8018
查看次数

如何计算Hill Cipher算法中的逆键矩阵?

我发现很难理解在Hill Cipher算法中计算矩阵的逆矩阵的方式.我知道这一切都是在模运算中完成的,但不知怎的,事情并没有增加.我真的很感激一个简单的解释!

考虑以下Hill Cipher密钥矩阵:

 5 8 
17 3
Run Code Online (Sandbox Code Playgroud)

请使用上面的矩阵进行说明.

encryption algorithm cryptography matrix-inverse

7
推荐指数
1
解决办法
4万
查看次数

MATLAB中最有效的矩阵求逆

在MATLAB中计算某些方阵A的逆时,使用

Ai = inv(A)
% should be the same as:
Ai = A^-1
Run Code Online (Sandbox Code Playgroud)

MATLAB通常会通知我这不是最有效的反转方式.那么什么更有效?如果我有一个方程式系统,可能使用/,\运算符.但有时我需要其他计算的逆.

反转最有效的方法是什么?

matlab matrix linear-algebra matrix-inverse

7
推荐指数
1
解决办法
3万
查看次数

python中稀疏矩阵的伪逆

我正在使用来自神经成像的数据,并且由于数据量很大,我想对我的代码使用稀疏矩阵(scipy.sparse.lil_matrix或csr_matrix).

特别是,我需要计算矩阵的伪逆以解决最小二乘问题.我找到了sparse.lsqr方法,但效率不高.有没有一种方法来计算Moore-Penrose的伪逆(对应于正常矩阵的pinv).

我的矩阵A的大小约为600'000x2000,并且在矩阵的每一行中,我将具有0到4非零值.矩阵A的大小由体素x纤维束(白质纤维束)给出,我们期望在体素中最多穿过4个束.在大多数白质体素中,我们预计至少有1个道,但我会说大约20%的线可能是零.

向量b不应该是稀疏的,实际上b包含每个体素的度量,通常不是零.

我需要最小化错误,但是向量x上也存在一些条件.当我在较小的矩阵上尝试模型时,我从不需要约束系统以满足这些条件(通常为0

有什么帮助吗?有没有办法避免采取A的伪逆?

谢谢

6月1日更新: 再次感谢您的帮助.我无法向你展示我的数据,因为python中的代码给了我一些问题.但是,为了理解我如何选择一个好的k,我试图在Matlab中创建一个测试函数.

代码如下:

F=zeros(100000,1000);

for k=1:150000
    p=rand(1);
    a=0;
    b=0;
    while a<=0 || b<=0
    a=random('Binomial',100000,p);
    b=random('Binomial',1000,p);
    end
    F(a,b)=rand(1);
end

solution=repmat([0.5,0.5,0.8,0.7,0.9,0.4,0.7,0.7,0.9,0.6],1,100);
size(solution)
solution=solution';
measure=F*solution;
%check=pinvF*measure;
k=250;
F=sparse(F);
[U,S,V]=svds(F,k);
s=svds(F,k);
plot(s)
max(max(U*S*V'-F))
for s=1:k
    if S(s,s)~=0
        S(s,s)=1/S(s,s);
    end
end

inv=V*S'*U';
inv*measure
max(inv*measure-solution)
Run Code Online (Sandbox Code Playgroud)

你知道与F的大小相比应该是什么?我已经花了250(超过1000)并且结果不令人满意(等待时间可以接受,但不是很短).现在我也可以将结果与已知的解决方案进行比较,但是如何选择k呢?我还附上了我获得的250个单值的图,并将它们的正方形归一化.我不知道如何更好地在matlab中做一个screeplot.我现在正在进行更大的k,以确定是否会突然显示该值会小得多.

再次感谢,珍妮弗

图像显示250计算. 我不知道如何在Matlab中创建一个scree图. 平方归一化单值

python linear-algebra sparse-matrix matrix-inverse least-squares

7
推荐指数
2
解决办法
5190
查看次数

对称正定矩阵的本征有效逆

在本征,如果我们有对称正定矩阵A那么我们就可以计算出的逆A

A.inverse();
Run Code Online (Sandbox Code Playgroud)

或者

A.llt().solve(I);
Run Code Online (Sandbox Code Playgroud)

其中I是与 大小相同的单位矩阵A。但是有没有更有效的方法来计算对称正定矩阵的逆矩阵?

例如,如果我们写出Aas的 Cholesky 分解A = LL^{T},则L^{-T} L^{-1}Asince的逆A L^{-T} L^{-1} = LL^{T} L^{-T} L^{-1} = I(并且 whereL^{-T}表示 的转置的逆L)。

所以我们可以得到 的 Cholesky 分解A,计算它的逆,然后得到逆的叉积来找到 的逆A。但我的直觉是,计算这些显式步骤会比使用A.llt().solve(I)上述方法慢。

在有人问之前,我确实需要一个显式逆 - 它是 Gibbs 采样器的一部分的计算。

c++ matrix-inverse eigen

7
推荐指数
1
解决办法
5459
查看次数

没有封装的快速矩阵求逆

假设我有一个方阵 M.假设我想反转矩阵M.

我试图使用gmpy2中的fractions mpq类作为我的矩阵的成员.如果您不熟悉这些分数,它们在功能上与python的内置包类似.唯一的问题是,除非我将它们从分数形式中取出,否则没有包会反转我的矩阵.我需要分数形式的数字和答案.所以我必须编写自己的函数来反转. MfractionsM

我可以编程已知的算法,例如高斯消除.但是,性能是一个问题,所以我的问题如下:

有没有计算速度快的算法可以用来计算矩阵的逆矩阵M

python matrix matrix-inverse

7
推荐指数
1
解决办法
922
查看次数

计算矩阵逆的对角线的有效方法

计算对称密集矩阵(2000 * 2000)的逆对角线的最佳方法是什么?目前我首先计算逆solve(x),然后提取对角线(diag(y)).即使它有效,但我想知道是否有更好的方法来做到这一点,所以代码运行得更快.我尝试过,chol2inv()但由于我的矩阵不是正确的,所以它没有用.

更新:对于任何可能感兴趣的人,我都可以通过使用优化的数学库英特尔MKL来加速矩阵求逆.在我的机器上反转2000*2000矩阵需要3秒钟.英特尔MKL适用于Microsoft R Open.

r matrix-inverse

7
推荐指数
1
解决办法
545
查看次数

使用 `np.linalg.solve()` 计算 `AB?¹`

我需要AB?¹在 Python/Numpy 中计算两个矩阵ABB当然是正方形)。

我知道这np.linalg.inv()可以让我计算B?¹,然后我可以乘以A。我也知道,B?¹A实际上是更好地与计算np.linalg.solve()

受此启发,我决定AB?¹np.linalg.solve(). 我得到了一个基于身份 的公式(AB)? = B?A?,它使用np.linalg.solve().transpose()

np.linalg.solve(a.transpose(), b.transpose()).transpose()
Run Code Online (Sandbox Code Playgroud)

这似乎在做这项工作:

import numpy as np


n, m = 4, 2
np.random.seed(0)
a = np.random.random((n, n))
b = np.random.random((m, n))

print(np.matmul(b, np.linalg.inv(a)))
# [[ 2.87169378 -0.04207382 -1.10553758 -0.83200471]
#  [-1.08733434  1.00110176  0.79683577  0.67487591]]
print(np.linalg.solve(a.transpose(), b.transpose()).transpose())
# [[ 2.87169378 -0.04207382 …
Run Code Online (Sandbox Code Playgroud)

python numpy linear-algebra matrix-inverse

7
推荐指数
1
解决办法
179
查看次数

巨大的对称矩阵 - 如何巧妙地存储和使用它 - Python

我有一个对称矩阵.现在,问题在于我需要填充这样的维度矩阵(32**3) x (32**3).我需要填充矩阵的原因是因为在我的程序中我使用它进行各种计算:我正在反转它,我将它与其他矩阵相乘......在我看来,为了执行这些各种你需要实际存储完整矩阵的计算,你不能使用例如只有一半(但我可能是错的,在这种情况下请告诉我应该怎么做).

问题是这样的矩阵对于我的计算机来说太大了,我得到以下错误:

Traceback (most recent call last):
    File "program.py", line 191, in <module>
        A = zeros((n_x*n_y*n_z. n_x*n_y*n_z), float)
MemoryError
Run Code Online (Sandbox Code Playgroud)

在这里,n_x = 32.那么,我该如何解决这个问题呢?有没有办法存储这么大的矩阵,或者是一种避免存储它的聪明方法?如果我可以使用它们而不会在计算中出错,那么这两种方式对我来说都没问题.

为了完整起见,我在下面报告A矩阵的构建方式:

    n_x = n_y = n_z = 32
    L_x = L_y = L_z = n_x
    A = zeros((n_x*n_y*n_z , n_x*n_y*n_z), float)
    P_0 = 50.0
    sigma_x = sigma_y = sigma_z = 0.9
    sigma_root = np.sqrt(sigma_x**2 + sigma_y**2 + sigma_z**2)
    twosigmasquared = 2.*sigma_root**2
    for l in range(n_x*n_y*n_z):
        for m in range(n_x*n_y*n_z):
            A[l][m] …
Run Code Online (Sandbox Code Playgroud)

python symmetric matrix-inverse bigdata matrix-multiplication

6
推荐指数
1
解决办法
614
查看次数