标签: matrix-decomposition

如何生成条目统一的 Rank 5 矩阵?

我想在 numpy 中生成一个 5 级 100x600 矩阵,其中所有条目均从 np.random.uniform(0, 20) 采样,以便所有条目将均匀分布在 [0, 20) 之间。在 python 中这样做的最佳方法是什么?

我看到这里有一种受 SVD 启发的方法(https://math.stackexchange.com/questions/3567510/how-to-generate-a-rank-r-matrix-with-entries-uniform),但是我不知道如何编码。我正在寻找这种 SVD 启发方式的工作示例来获取均匀分布的条目。

实际上,我已经通过垂直堆叠五个 20x100 1 阶矩阵,然后打乱垂直索引,成功地编码了 5 阶 100x100 矩阵。然而,生成的 100x100 矩阵没有均匀分布的条目 [0, 20)。

这是我的代码(我最好的尝试):

import numpy as np
def randomMatrix(m, n, p, q):
    # creates an m x n matrix with lower bound p and upper bound q, randomly.
    count = np.random.uniform(p, q, size=(m, n))
    return count

Qs = []
my_rank = 5
for i in range(my_rank):
  L …
Run Code Online (Sandbox Code Playgroud)

python numpy matrix svd matrix-decomposition

8
推荐指数
1
解决办法
482
查看次数

对“qr()”的信心动摇

我在处理排名不足的情况时非常依赖该qr()函数,但最近遇到了一些它无法正常工作的示例。考虑下面的矩阵badX

badX <-
structure(c(-1.641906809157e-10, 0, 0, 0, 0, -0.5, 0, 0, -1.10482935525559e-16, 
            0, -3.06266685765538e-17, 0, -4.83736007092039e-17, 0, -3.14414492582296e-18, 
            -3.06158275836099e-18), dim = c(4L, 4L), dimnames = list(c("(Intercept)", 
            "A2", "A3", "B2"), NULL))
Run Code Online (Sandbox Code Playgroud)

我们不能使用以下方法反转该矩阵solve()

solve(badX)
## Error in solve.default(badX): system is computationally singular: reciprocal condition number = 5.55308e-18
Run Code Online (Sandbox Code Playgroud)

然而qr(),其相关例程认为该矩阵的秩为 4,并且可以对其求逆:

qr(badX)$rank
## [1] 4

qr.solve(badX)
##             [,1] [,2]          [,3]          [,4]
## [1,] -6090479645    0  2.197085e+10  7.366741e+10
## [2,]           0   -2  0.000000e+00  0.000000e+00
## [3,]           0 …
Run Code Online (Sandbox Code Playgroud)

r matrix qr-decomposition matrix-decomposition

8
推荐指数
1
解决办法
189
查看次数

通过给定LU分解和常数向量求解线性方程组

给定LU LU分解和常量向量b这样LU*x=b ,是否有任何内置函数可以找到x?意思是这样的 -

X = functionName(L,U,b) 
Run Code Online (Sandbox Code Playgroud)

注意在这两个LU我们面对的是可直接要解决三角矩阵向前和向后的替换,而无需使用高斯消元过程.

编辑:

解决这个线性方程系统应该按照以下步骤 -

1. define y - s.t Ux=y
2. solve Ly=b by forward substitution
3. solve Ux=y by backward substitution
4. return y
Run Code Online (Sandbox Code Playgroud)

编辑2:

我发现linalg :: matlinsolveLU 但我没有尝试它因为我的版本太旧(R2010a).它适合任何人吗?

matlab linear-algebra matrix-decomposition matrix-factorization

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

在正半确定矩阵的Cholesky分解中正确使用枢轴

我不明白如何使用cholR中的函数来计算正半正定矩阵.(或者我这样做,并且有一个错误.)文档说明:

如果pivot = TRUE,则可以计算正半正定x的Choleski分解.x的等级作为attr(Q,"rank")返回,受数字误差的影响.枢轴以attr(Q,"pivot")返回.不再是t(Q)%*%Q等于x的情况.但是,设置pivot < - attr(Q,"pivot")和oo < - order(pivot),t(Q [,oo])%*%Q [,oo]等于x ...

以下示例似乎与此描述相符.

> x <- matrix(1, nrow=3, ncol=3)
> Q <- chol(x, pivot=TRUE)
> oo <- order(attr(Q, 'pivot'))
> t(Q[, oo]) %*% Q[, oo]
     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    1    1    1
[3,]    1    1    3
Run Code Online (Sandbox Code Playgroud)

结果不是x.我错误地使用了枢轴吗?

r matrix matrix-decomposition matrix-factorization

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

Java中的CHOLMOD

我已经问了类似的东西,但这次我会更具体.

我需要在for循环内执行通常大的正定对称矩阵(约1000x1000)的Cholesky分解.现在,要做到这一点,我一直试图:

1)Apache Math库

2)并行Colt库

3)JLapack库

在上述三种情况中的任何一种情况下,例如,与MATLAB相比,时间消耗非常长.

因此,我想知道在Java中是否存在用于Cholesky分解的高度优化的外部工具:例如,我一直在考虑CHOLMOD算法,其实际上是内部调用的MATLAB和其他工具.

我真的很感激能够对此事进行全面的反馈.

java matrix-decomposition

5
推荐指数
1
解决办法
848
查看次数

Eigen3稀疏求解器不可复制

我正在研究一个数字代码,并希望评估该代码用例的稀疏和密集矩阵-LU分解(以及以后的分解)如何不同。Eigens密集分解对象可以是可复制的,并且可以使用boost :: variant缓存这些对象,以在以后获得更大的灵活性。

我想用稀疏解算器实现相同的目标,但是这样做有困难。下面的最小示例应说明我的方法。

问题是,为什么稀疏求解器不可复制?我可以只编写自己的复制操作,还是确定格式不正确。我该如何解决这个问题?

谢谢 :)

/// -------------------------------- DENSE APPROACH, WORKS -------------------------------

using CacheType = boost::variant<Eigen::FullPivLU<Eigen::MatrixXd>,
                                 Eigen::PartialPivLU<Eigen::MatrixXd>>;

// visit the variant, and solve with the correct decomposition
struct DenseVisitor : boost::static_visitor<Eigen::MatrixXd> {
    DenseVisitor(Eigen::MatrixXd const& r) : rhs{r} {}

    template <class Decomposition>
    Eigen::MatrixXd operator()(Decomposition const& d) const
    {
        Eigen::MatrixXd res = d.solve(rhs);
        return res;
    }

private:
    Eigen::MatrixXd const& rhs; // reference to rhs, since () will take only one argument
};

// part of a class, having a cachetype as …
Run Code Online (Sandbox Code Playgroud)

c++ sparse-matrix eigen eigen3 matrix-decomposition

5
推荐指数
0
解决办法
120
查看次数

在java中计算截断奇异值分解的最佳方法

我想对最好的 2 或 3 个库进行基准测试,以计算截断奇异值分解 (SVD),即仅保留 k 个最大奇异值的 SVD。此外,我还有这些限制:

  • 它必须是一个java库
  • 我的矩阵很稀疏(大约 1% 的非零值)
  • 我的矩阵非常大(通常为 10k x 5k)
  • 我的矩阵也可以大于 high (5k x 10k)

我遇到过相当多的库,但例如,对于 Colt,我什至不知道 SVD 算法是否考虑到我的矩阵稀疏的事实。另外,我没有找到一个可以直接计算截断解决方案的库(这应该要快得多)。实际上,我最感兴趣的是从截断的 SVD 获得的近似矩阵。

预先感谢您的帮助,

罗曼·拉罗什

java matrix colt matrix-decomposition

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

MATLAB LU 分解 部分旋转

我正在尝试使用我的 lu 分解,主要基于带有部分旋转 Matlab 的 LU 分解

function [L,U,P] = lup(A)
n = length(A);
L = eye(n);
U = zeros(n);
P = eye(n);

for k=1:n-1
% find the entry in the left column with the largest abs value (pivot)
[~,r] = max(abs(A(k:end,k)));
r = n-(n-k+1)+r;

A([k r],:) = A([r k],:);
P([k r],:) = P([r k],:);
L([k r],:) = L([r k],:);

% from the pivot down divide by the pivot
L(k+1:n,k) = A(k+1:n,k) / A(k,k);

U(k,1:n) = A(k,1:n);
A(k+1:n,1:n) = …
Run Code Online (Sandbox Code Playgroud)

matlab matrix-decomposition

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

我的例子表明SVD在数值上比QR分解更不稳定

我在Math Stackexchange中问过这个问题,但似乎没有得到足够的关注,所以我在这里问它.https://math.stackexchange.com/questions/1729946/why-do-we-say-svd-can-handle-singular-matrx-when-doing-least-square-comparison?noredirect=1#comment3530971_1729946

我从一些教程中了解到,当解决最小二乘问题时,SVD应该比QR分解更稳定,并且它能够处理奇异矩阵.但是我在matlab中编写的以下示例似乎支持相反的结论.我对SVD没有深刻的理解,所以如果您可以在Math StackExchange的旧帖子中查看我的问题并向我解释,我会非常感激.

我使用具有大条件数(e + 13)的矩阵.结果显示SVD得到比QR(e-27)大得多的误差(0.8)

% we do a linear regression between Y and X
data= [
47.667483331 -122.1070832;
47.667483331001 -122.1070832
];
X = data(:,1);
Y = data(:,2);

X_1 =  [ones(length(X),1),X];

%%
%SVD method
[U,D,V] = svd(X_1,'econ');
beta_svd = V*diag(1./diag(D))*U'*Y;


%% QR method(here one can also use "\" operator, which will get the same result as I tested. I just wrote down backward substitution to educate myself)
[Q,R] = qr(X_1)
%now do backward substitution
[nr nc] = …
Run Code Online (Sandbox Code Playgroud)

matlab svd least-squares qr-decomposition matrix-decomposition

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

R中的chol()函数保持返回Upper Triangular(我需要Lower Triangular)

我试图使用chol()函数在R中获得下面矩阵的下三角Cholesky分解.然而,它继续返回上三角分解,我似乎无法找到一种方法来获得下三角分解,即使在查看文档之后.以下是我使用的代码 -

x <- matrix(c(4,2,-2, 2,10,2, -2,2,5), ncol = 3, nrow = 3)
Q <- chol(x)
Q
#       [,1] [,2]      [,3]
#  [1,]    2    1 -1.000000
#  [2,]    0    3  1.000000
#  [3,]    0    0  1.732051
Run Code Online (Sandbox Code Playgroud)

基本上,我需要找到矩阵Q这样QQ' = X.谢谢你的帮助!

r matrix matrix-decomposition

2
推荐指数
1
解决办法
2057
查看次数