所以,我正在使用稀疏的numpy数组进行一些Kmeans分类-
很多零。我发现我会使用scipy的“稀疏”包来减少存储开销,但是我对如何创建数组而不是矩阵有些困惑。
我已经完成了有关如何创建稀疏矩阵的教程:html" target="_blank">html" target="_blank">http
:
//www.scipy.org/SciPy_Tutorial#head-c60163f2fd2bab79edd94be43682414f18b90df7
为了模拟一个数组,我只创建了一个1xN的矩阵,但是正如您可能猜到的,Asp.dot(Bsp)不能完全起作用,因为您不能将两个1xN的矩阵相乘。我必须将每个数组转置为Nx1,这很la脚,因为我会在每次点积计算中都这样做。
接下来,我尝试创建一个NxN矩阵,其中第1列==第1行(这样,您可以将两个矩阵相乘,并且只将左上角作为点积),但是事实证明这效率很低。
我很乐意使用scipy的稀疏包作为numpy的array()的魔术替代品,但是到目前为止,我还不确定该怎么做。
有什么建议吗?
使用scipy.sparse基于行或列的格式:csc_matrix和csr_matrix。
它们使用幕后高效的C实现(包括乘法),并且转置是无操作的(尤其是如果调用transpose(copy=False)),就像numpy数组一样。
编辑:通过ipython的一些时间:
import numpy, scipy.sparse
n = 100000
x = (numpy.random.rand(n) * 2).astype(int).astype(float) # 50% sparse vector
x_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 loop
timeit x_dok * x_dok.T
1 loops, best of 3: 1.73 s per loop
timeit x_csr.multiply(x_csr).sum()
1000 loops, best of 3: 1.64 ms per loop
timeit x_csr * x_csr.T
100 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倍快。
请看示例代码(注意 data 的数组下标): -- http://www.kyne.com.au/~mark/software/lua-cjson.php -- version: 2.1 devel local json = require("cjson") local data = {1, 2} data[1000] = 99 -- ... do the other things ngx.
问题内容: 也就是说,如果我将当前时间用作数组的索引: 解释器将实例化从0到现在的所有元素吗?不同的浏览器会做不同的事情吗? 我记得AIX内核中曾经存在一个错误,该错误会在请求时创建伪tty,但是如果您说“ echo> / dev / pty10000000000”,它将创建/ dev / pty0,/ dev / pty1, ....然后跌倒死亡。在贸易展览会上这很有趣,但是我不希望这种情况发生
我正在使用Jax-RS和Jooq。我想知道如何使用稀疏数据实现REST补丁。 比如说我有一些PoJo。我得到了一个JSON补丁(http://www.restapitutorial.com/lessons/httpmethods.html)请求的对象不完整,只包含应该更改的字段。 我该如何编写这样的处理程序? 我试着接受真实的Pojo对象。我的第一个想法是“如果一个字段为空,我就不更新它”。这是我
稀疏数组核心 第一行表示了稀疏数组的组成核心,稀疏数组一共只有三列 第一行第一列表示数组一共有多少行,第一行第二列表示数组一共有多少行,第一行第三列表示数组中有多少个特殊值 从第一行之后的所有行表示数据行,第一列表示数据所在的行数,第二列表示数据坐在的列数,第三列表述具体数据的值 def get_sparse_arr(arr: 'sparse_arr') -> 'sparse_arr':
我正在网上寻找稀疏图的好定义,但我很困惑。稀疏图实际上是一个具有数百万/数十亿节点的大图吗?一个例子是现实世界的一个——比如Facebook。或者它们也可以在小型网络中? 提前感谢!
稀疏矩阵(Sparse Matrix) 注:压缩存储的矩阵可以分为特殊矩阵和稀疏矩阵。对于那些具有相同元素或零元素在矩阵中分布具有一定规律的矩阵,被称之为特殊矩阵。对于那些零元素数据远远多于非零元素数目,并且非零元素的分布没有规律的矩阵称之为稀疏矩阵。 1. 稀疏矩阵的概念 在矩阵中,若数值为0的元素数目远远多于非0元素的数目时,则称该矩阵为稀疏矩阵。与之相反,若非0元素数目占大多数时,则称该矩阵
问题内容: 我想将文件从一个地方复制到另一个地方,问题是我处理了很多稀疏文件。 有什么(简单的)复制稀疏文件而不会在目标位置变得庞大的方法? 我的基本代码: 问题答案: 一些背景理论 请注意,通过管道传输原始字节–一旦您认为将原始数据通过管道从到提供和的,就可以理解。这样,绝对可以处理提供字节的任何源以及使用它们的任何接收器。 另一方面,文件中漏洞的位置是“侧通道”信息,这些“侧通道”信息是“经典
问题内容: 我得到了一个1TB的稀疏文件,在Linux上实际上存储了32MB数据。 是否可以“有效地”制作一个软件包来存储稀疏文件?该软件包应解压缩为另一台计算机上的1TB稀疏文件。理想情况下,“软件包”应为32MB左右。 注意:可能的解决方案是使用“ tar”:https : //wiki.archlinux.org/index.php/Sparse_file#Archiving_with_.6