标签: sparse-matrix

从Matrix包导入S4功能

矩阵包定义用于相乘的矩阵,即由S4通用功能分派一大堆S4方法%*%,crossprodtcrossprod.

如何导入"%*%"方法,以便在我自己的包中使用?我跑的时候这段代码失败了devtools::document():

#' @title my function
#'
#' @description Does magic Matrix stuff
#' @import methods
#' @importFrom Matrix "%*%" Diagonal
myfun <- function(x, y){
  x %*% Diagonal(x=y)
}
Run Code Online (Sandbox Code Playgroud)

如果x是稀疏矩阵,我想确保此函数使用Matrix包中的稀疏矩阵乘法方法.但是当我运行时,devtools::document()我收到以下错误:

Updating mypackage documentation
Loading mypackage
Error: object ‘%*%’ is not exported by 'namespace:Matrix'
Run Code Online (Sandbox Code Playgroud)

r package sparse-matrix s4 roxygen2

13
推荐指数
1
解决办法
569
查看次数

Pandas稀疏dataFrame到稀疏矩阵,而不在内存中生成密集矩阵

有没有办法从a转换pandas.SparseDataFramescipy.sparse.csr_matrix,而不在内存中生成密集矩阵?

scipy.sparse.csr_matrix(df.values)
Run Code Online (Sandbox Code Playgroud)

不起作用,因为它产生一个密集的矩阵,投射到csr_matrix.

提前致谢!

python scipy sparse-matrix pandas

13
推荐指数
2
解决办法
8815
查看次数

Scipy.sparse.csr_matrix:如何获得十大价值和指数?

我有一个很大的csr_matrix,我对前十个值及其每一行的指数感兴趣.但我没有找到一种操纵矩阵的好方法.

这是我目前的解决方案,主要思想是逐行处理它们:

row = csr_matrix.getrow(row_number).toarray()[0].ravel()
top_ten_indicies = row.argsort()[-10:]
top_ten_values = row[row.argsort()[-10:]]
Run Code Online (Sandbox Code Playgroud)

通过这样做,csr_matrix没有充分利用其优点.它更像是一个强力解决方案.

python scipy sparse-matrix

13
推荐指数
3
解决办法
9874
查看次数

具有可参数化"零"的稀疏矩阵类

我正在对日志域中的浮点稀疏矩阵进行一些计算,因此"空"条目实际上是-Inf(使用-FLT_MAX).我现在正在使用自定义稀疏矩阵类,但我渴望交换一个现成的替代品.

这是用C++编写的.我倾向于查看Eigen和Boost uBlas中的压缩列矩阵.但是,不清楚是否支持"零"的自定义值(可能由模板参数提供).有没有人有建议?

澄清:

我想要的是:对于之前没有"设置"的任何单元格(i,j),我想mat [i,j]返回-Inf ...所以这可能更好地描述为"默认"稀疏矩阵的"空"条目的值.

我正在使用它来执行HMM递归(Viterbi,sum-product),并保留在日志域中以避免下溢.

我没有做任何矩阵操作......我只是填写一个动态编程画面.我想使用稀疏矩阵类,因为我只填充矩阵的一个带,我希望有效的内存使用.压缩的带状矩阵将提供良好的性能,因为我按顺序填充矩阵.

c++ math boost sparse-matrix eigen

12
推荐指数
1
解决办法
823
查看次数

改善严重条件矩阵

我有一个严重条件矩阵,它rcond()接近于零,因此,该矩阵的逆矩阵并不正确.我尝试过使用,pinv()但这并没有解决问题.这就是我采取相反的方式:

X = (A)\(b);
Run Code Online (Sandbox Code Playgroud)

我查找了这个问题的解决方案,并找到了改进矩阵的链接(最后的解决方案).那里的解决方案建议使用这个:

A_new = A_old + c*eye(size(A_old));
Run Code Online (Sandbox Code Playgroud)

哪里c > 0.到目前为止,采用这种技术可以使基质A更好地调节,并且所得溶液看起来更好.但是,我研究了使用不同的值,c所得到的解决方案取决于所选择的值c.

除了手动调查价值之外c,是否有一种自动方式可以找到c我获得最佳解决方案的价值?

matlab matrix sparse-matrix matrix-inverse regularized

12
推荐指数
3
解决办法
2万
查看次数

使用稀疏矩阵时的最佳实践

这个问题是基于这个问题的讨论.我之前一直在使用稀疏矩阵,我相信我使用它们的方式很有效.

我的问题是双重的:

在下面,A = full(S)其中S是稀疏矩阵.

访问稀疏矩阵中元素的"正确"方法是什么?

也就是说,稀疏等价物var = A(row, col)是什么?

我对这个话题的看法:你不会做任何不同的事情.var = S(row, col)尽可能高效.我在这方面受到了以下解释的挑战:

按照你所说的方式访问第2行和第2列的元素,S(2,2)与添加新元素相同:var = S(2,2)=> A = full(S)=> var = A(2,2)=> S = sparse(A) => 4.

这句话真的可以说对吗?

将元素添加到稀疏矩阵的"正确"方法是什么?

也就是说,稀疏等价物会A(row, col) = var是什么?(假设A(row, col) == 0开始)

众所周知,A(row, col) = var对于大型稀疏矩阵来说,简单地做就很慢.从文档:

如果要更改此矩阵中的值,可能会尝试使用相同的索引:

B(3,1)= 42; %此代码确实有效,但速度很慢.

我对这个主题的看法:当使用稀疏矩阵时,你经常从向量开始并使用它们以这种方式创建矩阵:S = sparse(i,j,s,m,n).当然,您也可以像这样创建它:S = sparse(A)或者sprand(m,n,density) …

performance benchmarking matlab sparse-matrix

12
推荐指数
2
解决办法
1498
查看次数

我什么时候应该使用`稀疏`?

我一直在查看Matlab的sparse文档,试图找出是否有任何关于何时使用稀疏表示而不是完整表示的指导.

例如,我有一个data大约30%非零条目的矩阵.我可以查看使用的内存.

whos data
  Name             Size                 Bytes  Class     Attributes

  data      84143929x11            4394073488  double    sparse    
Run Code Online (Sandbox Code Playgroud)
data = full(data);
whos data
  Name             Size                 Bytes  Class     Attributes

  data      84143929x11            7404665752  double              
Run Code Online (Sandbox Code Playgroud)

在这里,我显然在节省内存,但对于任何具有30%非零条目的矩阵,这是否都适用?50%的非零条目怎么样?是否有一个经验法则,我应该将百分比转换为完整矩阵?

那么计算呢?使用稀疏矩阵进行矩阵乘法通常更慢或更快吗?稀疏矩阵运算表示

稀疏运算的计算复杂度与nnz成比例,nnz是矩阵中非零元素的数量.计算复杂度也线性地取决于矩阵的行大小m和列大小n,但是与乘积m*n(零和非零元素的总数)无关.

在不了解更多细节的情况下,很难与完整矩阵进行比较.

Scipy的稀疏矩阵库解释了每种稀疏格式的优缺点.比如说csc_matrix

CSC格式的优点

  • 高效算术运算CSC + CSC,CSC*CSC等
  • 有效的列切片
  • 快速矩阵矢量积(CSR,BSR可能更快)

CSC格式的缺点

  • 慢行切片操作(考虑CSR)
  • 稀疏结构的变化是昂贵的(考虑LIL或DOK)

是否sparse存在关于Matlab 实现的类似信息?如果是这样我在哪里可以找到它?

matlab sparse-matrix

12
推荐指数
1
解决办法
3065
查看次数

scipy稀疏矩阵中每行或每列的Argmax

scipy.sparse.coo_matrix.max给定轴,返回每行或每列的最大值.我想知道的不是值,而是每行或每列的最大值的索引.我还没有办法以有效的方式做到这一点,所以我很乐意接受任何帮助.

python scipy sparse-matrix

12
推荐指数
1
解决办法
3381
查看次数

R中具有稀疏特征矩阵的大规模回归

我想在R中进行大规模回归(线性/逻辑),具有许多(例如100k)特征,其中每个示例在特征空间中相对稀疏---例如,每个示例约1k非零特征.

似乎SparseMslm应该这样做,但我很难从sparseMatrix格式转换为slm友好格式.

我有一个标签的数字向量y和{0,1}中的一个sparseMatrix特征X\.当我尝试

model <- slm(y ~ X)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Error in model.frame.default(formula = y ~ X) : 
invalid type (S4) for variable 'X'
Run Code Online (Sandbox Code Playgroud)

大概是因为slm想要一个SparseM物体而不是一个物体sparseMatrix.

是否有一种简单的方法来a)SparseM直接填充对象或b)将a转换sparseMatrixSparseM对象?或许有更好/更简单的方法来做到这一点?

(我想我可以使用X和显式编码线性回归的解决方案y,但是slm工作会很好.)

regression r sparse-matrix

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

R中对dist函数有稀疏支持吗?

有没有人听说任何dist{stats}与R创建的功能相同的包或功能

距离矩阵,通过使用指定的距离度量来计算数据矩阵的行之间的距离,

但是将一个sprase矩阵作为输入?

我的data.frame(已命名dataCluster)有dims:7000 X 10000,几乎99%稀疏.在不稀疏的常规形式中,此功能似乎不会停止工作......

h1 <- hclust( dist( dataCluster ) , method = "complete" )
Run Code Online (Sandbox Code Playgroud)

类似的问题没有答案: 稀疏矩阵作为R中的分层聚类的输入

r hierarchical-clustering sparse-matrix

11
推荐指数
1
解决办法
1024
查看次数