假设我有一个2d稀疏数组.在我的实际用例中,行数和列数都要大得多(比如20000和50000),因此在使用密集表示时它无法适应内存:
>>> import numpy as np
>>> import scipy.sparse as ssp
>>> a = ssp.lil_matrix((5, 3))
>>> a[1, 2] = -1
>>> a[4, 1] = 2
>>> a.todense()
matrix([[ 0., 0., 0.],
[ 0., 0., -1.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 2., 0.]])
Run Code Online (Sandbox Code Playgroud)
现在假设我有一个密集的1d数组,其中包含大小为3的所有非零组件(在我的实际案例中为50000):
>>> d = np.ones(3) * 3
>>> d
array([ 3., 3., 3.])
Run Code Online (Sandbox Code Playgroud)
我想使用numpy的常用广播语义来计算a和d的元素乘法.然而,scipy中的稀疏矩阵属于np.matrix:'*'运算符被重载使其行为类似于矩阵乘法而不是逐元乘法:
>>> a * d
array([ 0., -3., 0., 0., 6.])
Run Code Online (Sandbox Code Playgroud)
一种解决方案是将'a'切换到'*'运算符的数组语义,这将产生预期的结果:
>>> a.toarray() * d
array([[ 0., 0., …Run Code Online (Sandbox Code Playgroud) 我正在使用一些相当大的稀疏矩阵(从5000x5000到20000x20000)并且需要找到一种以灵活方式连接矩阵的有效方法,以便从不同的部分构造随机矩阵.
现在我使用以下方法连接四个矩阵,但它的效率非常低.有没有更好的方法来做到这一点,不涉及转换为密集矩阵?
rmat[0:m1.shape[0],0:m1.shape[1]] = m1
rmat[m1.shape[0]:rmat.shape[0],m1.shape[1]:rmat.shape[1]] = m2
rmat[0:m1.shape[0],m1.shape[1]:rmat.shape[1]] = bridge
rmat[m1.shape[0]:rmat.shape[0],0:m1.shape[1]] = bridge.transpose()
Run Code Online (Sandbox Code Playgroud) 我注意到Pandas现在支持Sparse Matrices和Arrays.目前,我创建DataFrame()如下:
return DataFrame(matrix.toarray(), columns=features, index=observations)
Run Code Online (Sandbox Code Playgroud)
有没有办法创建SparseDataFrame()一个scipy.sparse.csc_matrix()或csr_matrix()?转换为密集格式会严重影响RAM.谢谢!
计算矩阵的特征值有多贵?
最佳算法的复杂性是什么?
如果我有一个1000 x 1000的矩阵,在实践中需要多长时间?我认为如果矩阵稀疏会有帮助吗?
是否存在特征值计算不会终止的情况?
在R,我可以计算特征值,如下面的玩具示例所示:
m<-matrix( c(13,2, 5,4), ncol=2, nrow=2 )
eigen(m, only.values=1)
$values
[1] 14 3
Run Code Online (Sandbox Code Playgroud)
有谁知道它使用什么算法?
是否还有其他(开源)软件包可以计算特征值?
我有一个常规矩阵(非稀疏),我想转换为sparseMatrix(使用Matrix包).有没有这样做的功能,还是我需要做一堆循环?
恩.
> regMat <- matrix(0, nrow=10, ncol=10)
> regMat[3,5] <- round(runif(1),2)*100
> regMat[2,8] <- round(runif(1),2)*100
> regMat[8,4] <- round(runif(1),2)*100
> regMat[1,6] <- round(runif(1),2)*100
> regMat[7,4] <- round(runif(1),2)*100
> regMat
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 0 0 0 0 0 49 0 0 0 0
[2,] 0 0 0 0 0 0 0 93 0 0
[3,] 0 0 0 0 20 0 0 0 0 0
[4,] 0 0 …Run Code Online (Sandbox Code Playgroud) 假设我有一个来自scipy.sparse的NxN矩阵M(lil_matrix或csr_matrix),我想让它(N + 1)xN,其中M_modified [i,j] = M [i,j]为0 <= i <N (和所有j)和所有j的M [N,j] = 0.基本上,我想在M的底部添加一行零并保留矩阵的其余部分.有没有办法在不复制数据的情况下执行此操作?
对于R,至少有两个稀疏矩阵包.我正在调查这些因为我正在使用太大而稀疏的数据集以适应具有密集表示的内存.我想要基本的线性代数例程,以及轻松编写C代码来操作它们的能力.哪个库最成熟,最好用?
到目前为止我发现了
有人有这方面的经验吗?
通过在RSeek.org上搜索一下,Matrix包似乎是最常提到的一个.我经常认为CRAN任务视图是相当权威的,而多变量任务视图提到了Matrix和SparseM.
Scipy有许多不同类型的稀疏矩阵.这些类型之间最重要的区别是什么,它们的预期用途有何不同?
我正在基于Matlab中的示例代码1在python中开发代码.代码的一部分使用稀疏矩阵 - 在Matlab中似乎有一个(恼人的)类型,我试图找出我应该在python中使用哪种类型2.
1:这是一堂课.大多数人都在使用Matlab进行项目,但我喜欢创造不必要的工作和混乱 - 显然.
2:这是一个学术问题:我使用" CSR "格式正常运行代码,但我很有兴趣知道最佳用法是什么.
我正在为.NET/C#寻找一个好的(经过良好测试,功能齐全,界面友好的)矩阵库.我在这里的主要要求只是它应该是免费的(我不特别在意它是否是这种情况下的开源)并且最好支持稀疏矩阵运算.强制性要求是所有基本操作(例如乘法,换位,反演)以及寻找特征值和特征向量.用于发现特征值的数值而非/以及分析方法的实现,特别是用于稀疏矩阵的Lanczos算法,将是非常优选的,因为我将要处理的矩阵非常大(长度为10,000向上),因为正方形,也相当稀疏.这么说,我可能会在那里要求一点,所以对合理完整的矩阵库的任何建议都会很棒.
现在我知道Python有一两个有用的库用于这样的任务(即NumPy/SciPy),但遗憾的是,该领域似乎缺乏.NET.
稍微搜索了以下.NET的库,我可以使用它:
但是,由于我没有使用任何这些库或其他任何经验(并且没有足够的时间在任何情况下正确地检查每个库),我非常感谢这里有人可以讨论他们关于各种库的建议,他们的优点/缺点,特别是关于我的用途的适用性,以及他们的一般经验.
求助于MatLab总是一个选择,但不是首选,因为如果我可以直接将矩阵数学与我的程序集成,那将更加方便.
使用SciPy/Numpy在Python中连接稀疏矩阵的最有效方法是什么?
我在这里使用了以下内容:
>>> np.hstack((X, X2))
array([ <49998x70000 sparse matrix of type '<class 'numpy.float64'>'
with 1135520 stored elements in Compressed Sparse Row format>,
<49998x70000 sparse matrix of type '<class 'numpy.int64'>'
with 1135520 stored elements in Compressed Sparse Row format>],
dtype=object)
Run Code Online (Sandbox Code Playgroud)
我想在回归中使用两个预测变量,但目前的格式显然不是我想要的.是否有可能获得以下内容:
<49998x1400000 sparse matrix of type '<class 'numpy.float64'>'
with 2271040 stored elements in Compressed Sparse Row format>
Run Code Online (Sandbox Code Playgroud)
它太大而无法转换为深层格式.
sparse-matrix ×10
python ×6
scipy ×6
matrix ×5
numpy ×3
r ×3
.net ×1
eigenvalue ×1
math ×1
pandas ×1
statistics ×1