该矩阵包定义用于相乘的矩阵,即由S4通用功能分派一大堆S4方法%*%,crossprod和tcrossprod.
如何导入"%*%"方法,以便在我自己的包中使用?我跑的时候这段代码失败了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) 有没有办法从a转换pandas.SparseDataFrame为scipy.sparse.csr_matrix,而不在内存中生成密集矩阵?
scipy.sparse.csr_matrix(df.values)
Run Code Online (Sandbox Code Playgroud)
不起作用,因为它产生一个密集的矩阵,投射到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没有充分利用其优点.它更像是一个强力解决方案.
我正在对日志域中的浮点稀疏矩阵进行一些计算,因此"空"条目实际上是-Inf(使用-FLT_MAX).我现在正在使用自定义稀疏矩阵类,但我渴望交换一个现成的替代品.
这是用C++编写的.我倾向于查看Eigen和Boost uBlas中的压缩列矩阵.但是,不清楚是否支持"零"的自定义值(可能由模板参数提供).有没有人有建议?
澄清:
我想要的是:对于之前没有"设置"的任何单元格(i,j),我想mat [i,j]返回-Inf ...所以这可能更好地描述为"默认"稀疏矩阵的"空"条目的值.
我正在使用它来执行HMM递归(Viterbi,sum-product),并保留在日志域中以避免下溢.
我没有做任何矩阵操作......我只是填写一个动态编程画面.我想使用稀疏矩阵类,因为我只填充矩阵的一个带,我希望有效的内存使用.压缩的带状矩阵将提供良好的性能,因为我按顺序填充矩阵.
我有一个严重条件矩阵,它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我获得最佳解决方案的价值?
这个问题是基于这个问题的讨论.我之前一直在使用稀疏矩阵,我相信我使用它们的方式很有效.
我的问题是双重的:
在下面,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) …
我一直在查看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 实现的类似信息?如果是这样我在哪里可以找到它?
scipy.sparse.coo_matrix.max给定轴,返回每行或每列的最大值.我想知道的不是值,而是每行或每列的最大值的索引.我还没有办法以有效的方式做到这一点,所以我很乐意接受任何帮助.
我想在R中进行大规模回归(线性/逻辑),具有许多(例如100k)特征,其中每个示例在特征空间中相对稀疏---例如,每个示例约1k非零特征.
似乎SparseM包slm应该这样做,但我很难从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转换sparseMatrix为SparseM对象?或许有更好/更简单的方法来做到这一点?
(我想我可以使用X和显式编码线性回归的解决方案y,但是slm工作会很好.)
有没有人听说任何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中的分层聚类的输入
sparse-matrix ×10
matlab ×3
python ×3
r ×3
scipy ×3
benchmarking ×1
boost ×1
c++ ×1
eigen ×1
math ×1
matrix ×1
package ×1
pandas ×1
performance ×1
regression ×1
regularized ×1
roxygen2 ×1
s4 ×1