Numba 中的稀疏矩阵

     2023-02-16     26

关键词:

【中文标题】Numba 中的稀疏矩阵【英文标题】:Sparse Matrix in Numba 【发布时间】:2013-10-25 13:21:20 【问题描述】:

我希望使用 Numba (http://numba.pydata.org/) 加速我的机器学习算法(用 Python 编写)。请注意,该算法将稀疏矩阵作为其输入数据。在我的纯 Python 实现中,我使用了来自 Scipy 的 csr_matrix 和相关类,但显然它与 Numba 的 JIT 编译器不兼容。

我还创建了自己的自定义类来实现稀疏矩阵(基本上是(索引,值)对列表的列表),但它再次与 Numba 不兼容(即,我收到一些奇怪的错误消息说它不识别扩展类型)

是否有另一种简单的方法来仅使用与 Numba 兼容的 numpy(不求助于 SciPy)来实现稀疏矩阵?任何示例代码将不胜感激。谢谢!

【问题讨论】:

您使用了csr_matrix 的哪些功能?您可以尝试在 numpy 中重现他们的行为,尽管我严重怀疑这通常会导致加速...... 我只使用 csr_matrix 来存储我的数据。我需要的只是逐行迭代,然后对于我想要检索索引和值列表的每一行。这就是为什么现在我创建了自己的类,实现为一个简单的列表列表。但是 Numba 的编译器再次无法识别它。 【参考方案1】:

您可以将稀疏矩阵的数据作为纯 numpy 或 python 访问。例如

M=sparse.csr_matrix([[1,0,0],[1,0,1],[1,1,1]])
ML = M.tolil()

for d,r in enumerate(zip(ML.data,ML.rows))
    # d,r are lists
    dr = np.array([d,r])
    print dr

产生:

[[1]
 [0]]
[[1 1]
 [0 2]]
[[1 1 1]
 [0 1 2]]

当然,numba 可以处理使用这些数组的代码,当然前提是它不期望每一行都具有相同大小的数组。


lil 格式存储值 2 个对象 dtype 数组,数据和索引存储列表,按行。

【讨论】:

【参考方案2】:

如果您只需遍历 CSR 矩阵的值,则可以将属性数据、indptr 和索引传递给函数而不是 CSR 矩阵对象。

from scipy import sparse
from numba import njit

@njit
def print_csr(A, iA, jA):
    for row in range(len(iA)-1):
        for i in range(iA[row], iA[row+1]):
            print(row, jA[i], A[i])

A = sparse.csr_matrix([[1, 2, 0], [0, 0, 3], [4, 0, 5]])
print_csr(A.data, A.indptr, A.indices)

【讨论】:

如何有效地将稀疏矩阵列添加到另一个稀疏矩阵中的每一列?

】如何有效地将稀疏矩阵列添加到另一个稀疏矩阵中的每一列?【英文标题】:Howwouldonegoaboutaddingasparsematrixcolumntoeverycolumninanothersparsematrixefficiently?【发布时间】:2021-11-1816:45:46【问题描述】:感谢您花时间查看我的问题。我正... 查看详情

Python中的稀疏3d矩阵/数组?

】Python中的稀疏3d矩阵/数组?【英文标题】:sparse3dmatrix/arrayinPython?【发布时间】:2011-12-0220:42:41【问题描述】:在scipy中,我们可以使用scipy.sparse.lil_matrix()等构造一个稀疏矩阵。但是矩阵是二维的。我想知道Python中是否存在用... 查看详情

c中的稀疏矩阵插入

】c中的稀疏矩阵插入【英文标题】:Sparsematrixinsertinc【发布时间】:2012-01-2617:05:48【问题描述】:我正在尝试进行有效的稀疏矩阵乘法。现在我正在将数据读入内存,这就是我的数据结构的样子:typedefstructnodeintx;inty;intvalue;struc... 查看详情

犰狳中的高效稀疏矩阵加法

】犰狳中的高效稀疏矩阵加法【英文标题】:EfficientsparsematrixadditioninArmadillo【发布时间】:2017-12-0200:36:06【问题描述】:我正在尝试构建形式为L的稀疏矩阵L和Hi分别是一个非常稀疏的矩阵和行向量。最终的L矩阵的密度应该在1%... 查看详情

使用 Numba 时如何并行化此 Python for 循环

...ython的Anaconda发行版和Numba,我编写了以下Python函数,它将稀疏矩阵A(以CSR格式存储)乘以密集向量x:@jitdefcsrMult(x,Adata,Aindices,Aindpt 查看详情

从numpy python中的稀疏矩阵生成密集矩阵

】从numpypython中的稀疏矩阵生成密集矩阵【英文标题】:Generatingadensematrixfromasparsematrixinnumpypython【发布时间】:2013-05-0612:28:45【问题描述】:我有一个包含以下类型架构的Sqlite数据库:termcount(doc_num,term,count)此表包含术语及其在... 查看详情

SciPy 稀疏矩阵中的测试数据预测误差

】SciPy稀疏矩阵中的测试数据预测误差【英文标题】:TestDataPredictionErrorinSciPysparsematrix【发布时间】:2014-08-2405:34:13【问题描述】:我将这样的LIBSVM格式的数据输入到SciPy稀疏矩阵中。训练集是多标签和多类的,如我问的这个问... 查看详情

sklearn svm中的稀疏预计算Gram矩阵?

】sklearnsvm中的稀疏预计算Gram矩阵?【英文标题】:SparseprecomputedGrammatricesinsklearnsvm?【发布时间】:2014-03-0513:40:01【问题描述】:我想将一个稀疏的预先计算的Gram矩阵传递给sklearn.svm.SVC.fit。这是一些工作代码:importnumpyasnpfromskle... 查看详情

稀疏矩阵中的最大和子矩形

】稀疏矩阵中的最大和子矩形【英文标题】:maximumsumsubrectangleinasparsematrix【发布时间】:2013-07-0920:55:02【问题描述】:正如其他帖子中所指出的,可以使用二维kadane算法在O(n^3)时间内在NxN矩阵中找到最大和子矩形。但是,如果... 查看详情

scipy中的这个稀疏矩阵是啥意思?

】scipy中的这个稀疏矩阵是啥意思?【英文标题】:Whatmeansthissparsematrixinscipy?scipy中的这个稀疏矩阵是什么意思?【发布时间】:2015-01-3004:18:29【问题描述】:我有一个NLP任务,我正在使用scikit-learn。阅读tutorials我发现必须对文... 查看详情

稀疏矩阵转置

  矩阵是线性代数中的一个知识,刚开始学习的时候可能感觉不到它有什么用处,最初的感觉就是对二维数据的操作。其实现实生活中矩阵的用处太大了,设计领域相当的广泛。在此只讨论稀疏矩阵的转置问题;  可能看到... 查看详情

推荐系统中的稀疏矩阵处理

  数据稀疏问题严重制约着协同过满推荐系统的发展。对于大型商务网站来说,由于产品和用户数量都很庞大,用户评分产品一般不超过产品总数的1%,两个用户共同评分的产品更是少之又少,解决数据稀菊问题是提高推荐质量的关... 查看详情

犰狳中是不是有类似稀疏立方体的东西,或者使用稀疏矩阵作为立方体中的切片的某种方式?

...有类似稀疏立方体的东西,或者使用稀疏矩阵作为立方体中的切片的某种方式?【英文标题】:Isthereasomethinglikeasparsecubeinarmadilloorsomewayofusingsparsematricesasslicesinacube?犰狳中是否有类似稀疏立方体的东西,或者使用稀疏矩阵作为立... 查看详情

无法使用 sklearn 中的稀疏矩阵计算 silhouette_score [关闭]

】无法使用sklearn中的稀疏矩阵计算silhouette_score[关闭]【英文标题】:Unabletocalculatesilhouette_scoreusingasparsematrixinsklearn[closed]【发布时间】:2021-02-2403:02:48【问题描述】:我正在尝试使用稀疏矩阵计算silhouette_score或silhouette_samples,... 查看详情

将犰狳中的矩阵从稀疏转换为密集(spmat 到 mat)

】将犰狳中的矩阵从稀疏转换为密集(spmat到mat)【英文标题】:ConvertMatriciesinArmadillofromSparsetoDense(spmattomat)【发布时间】:2014-11-1100:07:54【问题描述】:我正在使用ArmadilloC++线性代数库,并试图弄清楚如何将sp_mat稀疏矩阵对象... 查看详情

如何使用 numba 在 GPU 上泛化快速矩阵乘法

】如何使用numba在GPU上泛化快速矩阵乘法【英文标题】:HowtogeneralizefastmatrixmultiplicationonGPUusingnumba【发布时间】:2021-01-1916:18:06【问题描述】:最近我一直在尝试使用Numba库在Python中进行GPU编程。我一直在使用那里的教程在他们... 查看详情

r将简单三元组矩阵(tm包)转换为r中的稀疏矩阵(代码片段)

查看详情

稀疏矩阵的压缩与还原

...示一个非零元素的行数,列数和非零元素值,如:第3行中的2,4,4代表稀疏矩阵中的非零元素4在第2行,第4列,其值是4。谢谢高手了,这是课程作业压缩的时候以矩阵的形式输进去还原的时候以矩阵的形式输出来!!!!!!!注意!!... 查看详情