我有一个很大(500k X 500k)的稀疏矩阵。我想知道它的主要组成部分(实际上,即使只计算最大的PC也可以)。随机化的PCA效果很好,除了它本质上是寻找协方差矩阵的特征向量,而不是相关矩阵。使用大型稀疏矩阵的协方差矩阵找到PCA的软件包有什么想法吗?最好是在python中,尽管matlab和R也可以工作。
(作为参考,向提出了类似的问题,但方法涉及协方差矩阵)。
这个问题我需要一些帮助。
我想解决Ax = b,
A is n x n (square matrix), b is n x 1 matrix在哪里。
但是A矩阵具有这样的性质:+ Ill条件(K,>> 1) (可能大于10 ^ 8) +对称正定(因为它是协方差矩阵)
我已经尝试过Jacobi方法,但不幸的是,收敛速度非常慢。我避免使用Cholesky分解。
我已经尝试了共轭梯度,但不幸的是,如果矩阵A的条件数太大,它就不能收敛。
更新:我需要一个可以在并行框架中运行的方法(比如MPI)。所以在目前的迭代中,我不能使用需要xi的高斯-塞达尔。
我能用什么样的方法来解决这种问题呢?谢谢
我尝试在Python中执行以下数组减法: import numpy as np
from scipy.sparse import csr_matrix
a = np.array([[1, 2], [3, 4]])
b = a[:, None] - a[None, :]
sum_ = np.sum(b, axis=-1)
print(sum_) 上面的方法似乎是可行的。但是,如果我将上面的数组a更改为稀疏矩阵: a = csr_matrix(a) 如果正确执行上面的步骤,我会得到一个错误: IndexError: Index dimension must be <= 2 有什么办法解
我正在尝试用python库分解非常大的矩阵。由于矩阵太大了,我无法在内存中以登斯格式实例化它,所以我改用。
这个库有一个叫做的稀疏矩阵函数,这似乎就是我要找的。
当我尝试它时,我遇到了严重的分解性能问题(不是内存表示,而是速度),我还不能分解一个简单的10 x 95稀疏矩阵。
下面是我构建测试矩阵的方法:
m1 = lil_matrix((10, 95))
for i in xrange(10):
for j in xrange(95):
if random.random() > 0.8: m1[i, j] = 1
m1 = csc_matrix(m1)
这就是我
我希望在python2.7中划分两个稀疏矩阵,本质上是k = numerator / denominator,其结果是sp.csr_matrix类型的稀疏矩阵。我正在使用scipy as sp和numpy as np。
为了做到这一点,我遵循取分子的点积和分母的逆的线性格式。这两个项目都是sp.csr_matrix(([],([],[])),shape=[R,R])格式的。
K本身的计算是
k = sp.csr_matrix(numerator.dot(sp.linalg.inv(denominator)))
这样做会返回警告:
SparseEfficiencyWarning: splu re
在2d平面上有两种类型的单位,绿色单位(G)和红色单位(R)。平面由n个矩阵表示,每个单元被表示为矩阵中的一个元素。
如果两个单位的颜色不同,则两个单位的对称为“冲突对”。目标是找到包含最“冲突对”的m乘m子矩阵。
示例
[R R 0 0 0
R R 0 0 0
0 0 R R 0
0 0 0 G G
0 0 0 G G]
在上述5×5矩阵中,“最冲突”3×3子矩阵位于右下角,其中有2个红色单元和4个绿色单元,这相当于子矩阵中的8个冲突对。
一个朴素解将用O(m^2n^2)迭代每个可能的子矩阵中的每个元素。我还考虑使用动态规划,比如算法,时间复杂度将是O(n^2),这看起来很好,因为