我是一名从事地球物理反演的研究员。它需要求解线性系统:Au = rhs。这里A通常是稀疏矩阵,但rhs和u可以是稠密矩阵,也可以是向量。为了进行基于梯度的反演,需要进行灵敏度计算,需要大量的矩阵矩阵和矩阵向量乘法。最近,我在矩阵(稀疏)-矩阵(稠密)乘法中发现了一种奇怪的行为,下面是一个例子:
import numpy as np
import scipy.sparse as sp
n = int(1e6)
m = int(100)
e = np.ones(n)
A = sp.spdiags(np.vstack((e, e, e)), np.array([-1, 0, 1]), n, n)
A
我想要计算向量,
S=A B u,
其中s和u是N维复向量,A是N×M复矩阵,B是M×N复矩阵。当A、B和u的元素表示为浮点数时,以下哪两种方法具有更好的准确性(更有效的数字)?
(1)先计算B。
首先做矩阵向量乘法,
Y=B u
然后,另一个矩阵向量乘法
S=A y
(2)先计算A、B。
首先做矩阵-矩阵乘法,
C=A B
然后,矩阵向量乘法
S=C U
有什么已知的一般规则吗?
顺便说一下,我知道方法(1)比方法(2)效率高得多。
关于计算机视觉的另一个问题。
摄像机矩阵(也称为投影矩阵)通过以下关系将3D点X (例如在现实世界中)映射到图像点x (例如在照片中):
l **x** = P **X**
P描述了相机的一些外部和内部特性(它的方向、位置和投影特性)。当我们引用投影性质时,我们使用一个校准矩阵K。同样,R表示相机的旋转和它的平移,因此我们可以将P写为:
P = K [ R | t ]
R= t表示矩阵R和t的级联。
R is a matrix 3 X 3
t is a vector 3 X 1
K is a matrix 3 X 3
[R | t ] is a matrix 3 X 4
As a cons
我知道在R中有一些包可以有效地存储稀疏矩阵。是否也有一种方法可以有效地存储低秩矩阵?例如:
A <- matrix(rnorm(1e6), nrow=1e5, ncol=1e1)
B <- A %*% t(A)
现在,B太大了,不能存储在内存中,但它的秩很低。有没有办法以一种有效的方式构造和存储B,这样一些基本的读取方法(rowSums、colSums等)就可以动态执行,以换取B或内存?
我对使用Jama处理矩阵是个新手。我的问题是,当我使用det()方法(与LUDecomposition类相关)时,它会给出"Matrix must be square"。好的,我的矩阵是三角形的,但是对于LUDecomposition,它应该是方阵。我的代码如下所示
public double findDeterminant(Matrix mtrx) {
LUDecomposition dec = new LUDecomposition(mtrx);
det = dec.det();
return det;
}
我有一个巨大的m*n矩阵A(其中的行数m远大于列n),它存储在我的c++程序中,作为armadillo mat类型。现在我有一个向量w,为此我必须计算w=w-A*A^T*w,其中A^T表示矩阵A的转置。
由于矩阵A非常大,占用了大量内存,所以使用armadillo w=w-A*A.t()*w的通常快速方法无法工作,因为armadillo在这种情况下消耗了大量内存(cf )。)。他们解决这个问题的方法是引入函数inplace_trans( A, method ),它可以使用"lowmem“方法,该方法消耗更少的内存,但需要更多的时间。
我现在的问题是,inplace_trans( A,
我有两个矩阵市场格式的稀疏矩阵文件:
row col val
1 1 3.0
1 2 1.0
2 3 2.0
etc...
目前,我已经将文件分成了6个数组:
row_A[], col_A[], val_A[], row_B[] …
它们分别包含行索引、列索引和值。
我想轻松地将这两个矩阵相乘,而不必首先将它们转换为密集矩阵格式。有没有这样做的算法?
我在Quora上找到了这个伪代码,但我不确定它是不是最好的实现,或者它将如何在C:中实现
multiply(A,B):
for r in A.rows:
for c in A.rows[r]:
fo