栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

稀疏稀疏…数组?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

稀疏稀疏…数组?

使用

scipy.sparse
基于行或列的格式:
csc_matrix
csr_matrix

它们使用幕后高效的C实现(包括乘法),并且转置是无操作的(尤其是如果调用

transpose(copy=False)
),就像numpy数组一样。

编辑:通过ipython的一些时间:

import numpy, scipy.sparsen = 100000x = (numpy.random.rand(n) * 2).astype(int).astype(float) # 50% sparse vectorx_csr = scipy.sparse.csr_matrix(x)x_dok = scipy.sparse.dok_matrix(x.reshape(x_csr.shape))

现在

x_csr
x_dok
稀疏度为50%:

print repr(x_csr)<1x100000 sparse matrix of type '<type 'numpy.float64'>'        with 49757 stored elements in Compressed Sparse Row format>

和时间:

timeit numpy.dot(x, x)10000 loops, best of 3: 123 us per looptimeit x_dok * x_dok.T1 loops, best of 3: 1.73 s per looptimeit x_csr.multiply(x_csr).sum()1000 loops, best of 3: 1.64 ms per looptimeit x_csr * x_csr.T100 loops, best of 3: 3.62 ms per loop

所以看起来我在撒谎。换位 很便宜,但CSR * CSC没有高效的C实现(在最新的0.9.0
SciPy的)。每个调用中都会构造一个新的csr对象:-(

作为黑客(尽管现在scipy相对稳定),您可以直接在稀疏数据上进行点积运算:

timeit numpy.dot(x_csr.data, x_csr.data)10000 loops, best of 3: 62.9 us per loop

请注意,这最后一种方法会再次执行Numpy密集乘法。稀疏度为50%,因此实际上比

dot(x, x)
2倍快。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/645538.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号