这是我从[初学者指南到R]的练习中解决的过程
> Q
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 2 1
[3,] 2 3 0
> solve(Q)
[,1] [,2] [,3]
[1,] -0.12 0.36 -0.16
[2,] 0.08 -0.24 0.44
[3,] 0.32 0.04 -0.24
> solve(Q)%*%Q
[,1] [,2] [,3]
[1,] 1 -2.775558e-17 0
[2,] 0 1.000000e+00 0
[3,] 0 0.000000e+00 1
Run Code Online (Sandbox Code Playgroud)
我想知道为什么我无法得到身份矩阵应该出来的正确答案.
我正在使用Eigen(与c ++一起使用的自由线性代数包)并试图反转一个小矩阵.遵循官方的Eigen文档后,我得到以下内容:
#include <iostream>
using namespace std;
#include <Eigen/LU>
#include <Eigen/Dense>
using namespace Eigen;
Matrix3d k = Matrix3d::Random();
cout << "Here is the matrix k:" << endl << k << endl;
cout << "Its inverse is:" << endl << k.inverse() << endl;
cout << "The product of the two (supposedly the identity) is:" << endl << k.inverse()*k << endl;
Run Code Online (Sandbox Code Playgroud)
这给了我正确的答案.但是,如果不是随机分配矩阵,如果我创建一个矩阵然后自己分配所有值,它会给我错误的反转.例如,以下代码将给出错误的反转.
Matrix3d m;
Matrix3d mi;
for (int i = 0; i < 3; ++ i)
for (int j = 0; j …Run Code Online (Sandbox Code Playgroud) 我一直试图将这个问题包围起来,并希望得到一些见解.假设您有矩阵A,那么您切换行直到最终得到矩阵B;
A = [1 3 1;
3 2 1;
2 3 1;];
B = [3 2 1;
1 3 1;
2 3 1;];
invA =
0.0000 -1.0000 1.0000
-1.0000 -1.0000 2.0000
3.0000 5.0000 -7.0000
invB =
-1.0000 0.0000 1.0000
-1.0000 -1.0000 2.0000
5.0000 3.0000 -7.0000
Run Code Online (Sandbox Code Playgroud)
我该如何记录这些行开关?我最终试图改变B的倒数以匹配A的倒数.我的结论是,给定2行切换(也就是行1和2之间),除了切换列之外,逆的最终结果是相同的逆B的(1和2)
我有一个协方差矩阵的估计
我想取这个矩阵的逆,R给我以下错误
A=[ 3529861.470 8785861.47 6920.344 17120.34;
8785861.470 26209861.47 17120.344 51920.34;
6920.344 17120.34 14.000 34.00;
17120.344 51920.34 34.000 104.00]
Run Code Online (Sandbox Code Playgroud)
"solve.default(l)中的错误:系统是计算奇异的:倒数条件数= 2.14511e-22".
但是Matlab在不给出任何错误消息的情况下进行逆向计算.有谁知道R给我错误的原因?是否有任何其他计算逆的方法
我有一个矩阵m:
(m <- matrix(c(26,14,24,14,20,42,24,42,90), 3))
# [,1] [,2] [,3]
# [1,] 26 14 24
# [2,] 14 20 42
# [3,] 24 42 90
Run Code Online (Sandbox Code Playgroud)
当我运行solve(m)计算矩阵的逆时,我收到此错误消息:
solve(m)
Run Code Online (Sandbox Code Playgroud)
solve.default(m)出错:系统计算奇异:倒数条件数= 6.21104e-18
我有以下矩阵:
[
[
16.0,
23251143833701.0,
3.3788480598465756e+25,
4.9101301394821435e+37
],
[
23251143833701.0,
3.3788480598465756e+25,
4.9101301394821435e+37,
7.135383882205603e+49
],
[
3.3788480598465756e+25,
4.9101301394821435e+37,
7.135383882205603e+ 49,
1.0369114809614645e+62
],
[
4.9101301394821435e+37,
7.135383882205603e+49,
1.0369114809614645e+62,
1.5068361241656833e+74
]
]
Run Code Online (Sandbox Code Playgroud)
这个矩阵的决定因素是-1.4536774485912138e+135,如果我打电话regular?,它会返回true.但是,当我调用该方法时inverse,Ruby会引发以下异常:
matrix.rb:1079:in `block in inverse_from': Not Regular Matrix (ExceptionForMatrix::ErrNotRegular)
from matrix.rb:1069:in `upto'
from matrix.rb:1069:in `inverse_from'
from matrix.rb:1061:in `inverse'
Run Code Online (Sandbox Code Playgroud)
这里有什么问题?
我尝试计算R中协方差矩阵的逆.我使用了两者solve和ginv函数但是我无法正确找到单位矩阵.我想知道为什么会这样.以前有人遇到过这个问题吗?怎么解决?
d <- data.frame(r1,r2,r3,r4)
ad <- cov(d) # get covariance
Run Code Online (Sandbox Code Playgroud)
您可以访问ad:
ad <- structure(c(0.000564103047135273, 0.000209426917735389,
-2.50601812852379e-07, 0.000318692159506722, 0.000209426917735389,
8.92756413718721e-05, -9.42226640483041e-08, 0.000135853820739977,
-2.50601812852379e-07, -9.42226640483041e-08, 1.12190005351388e-10,
-1.43381875666865e-07, 0.000318692159506722, 0.000135853820739977,
-1.43381875666865e-07, 0.000206733441799332),
.Dim = c(4L, 4L),
.Dimnames = list(c("r1", "r2", "r3", "r4"),
c("r1", "r2", "r3", "r4")))
# r1 r2 r3 r4
#r1 5.641030e-04 2.094269e-04 -2.506018e-07 3.186922e-04
#r2 2.094269e-04 8.927564e-05 -9.422266e-08 1.358538e-04
#r3 -2.506018e-07 -9.422266e-08 1.121900e-10 -1.433819e-07
#r4 3.186922e-04 1.358538e-04 -1.433819e-07 2.067334e-04
a <- ginv(ad,tol = 1e-18) `# …Run Code Online (Sandbox Code Playgroud) 我正在 Apache Spark 中开发基于 Scala 的极限学习机。我的模型必须是 Spark Estimator 并使用 Spark 框架才能适应机器学习管道。有谁知道 Breeze 是否可以与 Spark 一起使用?我的所有数据都在 Spark 数据帧中,可以想象我可以使用 Breeze 导入它,使用 Breeze DenseVectors 作为数据结构,然后转换为用于 Estimator 部分的 DataFrame。Breeze 的优点是它有一个pinv针对 Moore-Penrose 伪逆的函数,它是一个非方阵的逆。据我所知,Spark MLlib 中没有等效的功能。我不知道是否可以将 Breeze 张量转换为 Spark DataFrames,所以如果有人有这方面的经验,那将非常有用。谢谢!
我有一个k我计算过的相机矩阵.价值k是:
[[ 1.92160183e+08 0.00000000e+00 3.06056985e+02]
[ 0.00000000e+00 1.92160183e+08 1.57709172e+02]
[ 0.00000000e+00 0.00000000e+00 1.00000000e+00]]
Run Code Online (Sandbox Code Playgroud)
现在,我试图找到k使用numpy(使用np.linalg.inv(k))的逆.让我们k1相反k.
使用numpy,值为k*k1:
[[ 1.00000000e+00 0.00000000e+00 -4.87462472e-04]
[ 0.00000000e+00 1.00000000e+00 -1.29434633e-04]
[ 0.00000000e+00 0.00000000e+00 1.00000000e+00]]
Run Code Online (Sandbox Code Playgroud)
现在,我期待一个完美的单位矩阵,但由于应该为零的值非常小,我决定忽略这样一个事实,即结果不是一个完美的单位矩阵.
现在我的问题:我有其他两个矩阵R和h.R是一个单位矩阵(它并不总是一个单位矩阵,但为了简单起见,这是假设).我需要表演H1 = k*R*k1*h.理想情况下,这应该将h的值赋给H1(因为k*R*k1应该证明是身份).
我原来的h矩阵:
[[ 1.71025842e+00 -7.51761942e-01 1.02803446e+02]
[ -2.98552735e-16 1.39232576e-01 1.62792482e+02]
[ -1.13518150e-18 -2.27094753e-03 1.00000000e+00]]
Run Code Online (Sandbox Code Playgroud)
我的R矩阵:
[[ 1. 0. 0.]
[ 0. 1. -0.]
[-0. 0. 1.]] …Run Code Online (Sandbox Code Playgroud) I am trying to transcribe a python code in Julia. I have a matrix
test = [2.0 3.0 4.0
3.0 4.0 5.0
4.0 5.0 6.0]
Run Code Online (Sandbox Code Playgroud)
I am computing the (Moore-Penrose) pseudo-inverse of a matrix in Python using numpy.linalg.pinv and the result is
[[-8.33333333e-01 -1.66666667e-01 5.00000000e-01]
[-1.66666667e-01 -7.86535165e-17 1.66666667e-01]
[ 5.00000000e-01 1.66666667e-01 -1.66666667e-01]]
Run Code Online (Sandbox Code Playgroud)
while in Julia the result of LinearAlgebra.pinv(test) is
3×3 Array{Float64,2}:
-1.33333 -0.166667 1.0
-0.166667 -6.59195e-17 0.166667
1.0 0.166667 -0.666667
Run Code Online (Sandbox Code Playgroud)
I would like to ask if anybody knows why …
matrix-inverse ×10
matrix ×4
r ×4
matlab ×2
python ×2
apache-spark ×1
arrays ×1
c++ ×1
eigen ×1
julia ×1
numpy ×1
permutation ×1
ruby ×1
scala-breeze ×1