标签: sparse-matrix

计算R中的稀疏成对距离矩阵

我有一个NxM矩阵,我想计算点NxN之间的欧几里德距离矩阵M.在我的问题中,N大约是100,000.由于我计划将此矩阵用于k近邻算法,我只需要保持k最小距离,因此得到的NxN矩阵非常稀疏.这与dist()例如导致密集矩阵(并且可能存在我的尺寸的存储问题N)的情况形成对比.

我到目前为止发现的kNN包(knnflex,kknn,等)均出现使用密集矩阵.此外,该Matrix包装不提供成对距离功能.

更接近我的目标,我发现该spam软件包具有一个nearest.dist()功能,允许人们只考虑小于某个阈值的距离,delta.然而,在我的情况下,特定值delta可能会产生太多的距离(因此我必须NxN密集地存储矩阵)或距离太远(因此我不能使用kNN).

我之前已经看到过尝试使用包执行k-means聚类的讨论bigmemory/biganalytics,但在这种情况下我似乎不能利用这些方法.

有人知道在R中以稀疏方式计算距离矩阵的函数/实现吗?我的(可怕的)备份计划是有两个for循环并将结果保存在一个Matrix对象中.

r distance sparse-matrix knn

21
推荐指数
1
解决办法
6724
查看次数

使用scipy在python中构建和更新稀疏矩阵

当我从文件中读取数据时,我正在尝试构建和更新稀疏矩阵.矩阵的大小100000X40000

更新稀疏矩阵的多个条目的最有效方法是什么?特别是我需要将每个条目递增1.

假设我有行索引 [2, 236, 246, 389, 1691]

和列索引 [117, 3, 34, 2757, 74, 1635, 52]

所以以下所有条目必须加1:

(2,117) (2,3) (2,34) (2,2757) ...

(236,117) (236,3) (236, 34) (236,2757) ...

等等.

我已经在使用,lil_matrix因为它在我尝试更新单个条目时给了我一个警告.

lil_matrix格式已经不支持多次更新. matrix[1:3,0] += [2,3]给我一个未实现的错误.

我可以通过单独递增每个条目来天真地做到这一点.我想知道是否有更好的方法来做到这一点,或者我可以使用更好的稀疏矩阵实现.

我的电脑也是一台普通的i5机器,内存为4GB,所以我要注意不要把它炸掉:)

python matrix scipy sparse-matrix python-2.7

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

计算python中非常大的稀疏矩阵的特征值

我有一个非常大的稀疏矩阵,表示马尔可夫链中的过渡马赛克,即矩阵的每一行的总和等于1,我有兴趣找到第一个特征值及其相应的小于1的向量.我知道特征值在[-1,1]部分中有界,它们都是实数(非复数).
我试图使用python scipy.sparse.eigs函数计算值,但是,函数的一个参数是要估计的特征值/向量的数量,每次我增加要估计的参数数量时,特征值的数量就是精确的一个人也成长了.
不用说,我正在使用which带有值的参数'LR'为了得到k个最大的特征值,k是要估计的值的数量.
有没有人知道如何解决这个问题(找到小于1的第一个特征值及其相应的向量)?

python scipy eigenvalue sparse-matrix eigenvector

20
推荐指数
1
解决办法
1001
查看次数

使用具有Keras和Tensorflow的稀疏矩阵

我的数据可以被视为10B条目(100M x 100)的矩阵,这是非常稀疏的(<1/100*1/100的条目非零).我想使用Tensorflow后端将数据输入到我制作的Keras神经网络模型中.

我的第一个想法是将数据扩展为密集,即将所有10B条目写入一系列CSV,大多数条目为零.然而,这很快就压倒了我的资源(甚至做了ETL不堪重负的大熊猫,并导致postgres挣扎).所以我需要使用真正的稀疏矩阵.

我怎么能用Keras(和Tensorflow)做到这一点?虽然numpy不支持稀疏矩阵,但scipy和tensorflow都支持稀疏矩阵.有很多讨论(例如 https://github.com/fchollet/keras/pull/1886 https://github.com/fchollet/keras/pull/3695/files https://github.com/pplonski/keras-稀疏检查 https://groups.google.com/forum/#!topic/keras-users/odsQBcNCdZg)关于这个想法 - 使用scipy的稀疏矩阵或直接转到Tensorflow的稀疏矩阵.但是我找不到一个明确的结论,我也无法得到任何工作(或者甚至清楚地知道要走哪条路!).

我怎样才能做到这一点?

我相信有两种可能的方法:

  1. 保持它作为scipy稀疏矩阵,然后,当给Keras一个小批量,使其密集
  2. 保持稀疏,并使用Tensorflow稀疏张量

我也认为#2是首选,因为你会在整个过程中获得更好的表现(我相信),但#1可能更容易并且足够了.我会很高兴.

如何实施?

sparse-matrix keras tensorflow

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

在PostgreSQL中表示稀疏数据

在PostgreSQL中表示稀疏数据矩阵的最佳方法是什么?我看到的两个明显的方法是:

  1. 将数据存储在单个表中,每个表都有一个单独的列(可能是数百万),但未使用的功能的默认值为NULL.这在概念上非常简单,但我知道在大多数RDMS实现中,这通常非常低效,因为NULL值通常会占用一些空间.但是,我读了一篇文章(遗憾的是找不到它的链接),声称PG没有占用NULL值的数据,使其更适合存储稀疏数据.

  2. 创建单独的"行"和"列"表,以及用于链接它们并在该行存储列值的中间表.我相信这是更传统的RDMS解决方案,但它有更多的复杂性和开销.

我还发现了PostgreDynamic,它声称可以更好地支持稀疏数据,但我不想仅仅为了这个功能而将整个数据库服务器切换到PG分支.

还有其他解决方案吗?我应该使用哪一个?

sql postgresql relational-database sparse-matrix

18
推荐指数
2
解决办法
8360
查看次数

稀疏矩阵到R中的数据帧

我有一个稀疏矩阵

Formal class 'dgCMatrix' [package "Matrix"] with 6 slots
  ..@ i       : int [1:37674] 1836 2297 108 472 1735 1899 2129 2131 5 67 ...
  ..@ p       : int [1:3417] 0 2 8 22 25 35 44 45 45 47 ...
  ..@ Dim     : int [1:2] 3416 3416
  ..@ Dimnames:List of 2
  .. ..$ : chr [1:3416] "AAA" "AAE" "AAL" "AAN" ...
  .. ..$ : chr [1:3416] "AAA" "AAE" "AAL" "AAN" ...
  ..@ x       : num [1:37674] 1 1 1 …
Run Code Online (Sandbox Code Playgroud)

r matrix sparse-matrix

18
推荐指数
2
解决办法
1万
查看次数

18
推荐指数
2
解决办法
1万
查看次数

如何在Python的SciPy中更改稀疏矩阵中的元素?

我已经构建了一个小代码,我想用它来解决涉及大型稀疏矩阵的特征值问题.它运行正常,我现在要做的就是将稀疏矩阵中的一些元素设置为零,即最顶行中的元素(对应于实现边界条件).我可以调整下面的列向量(C0,C1和C2)来实现这一点.但是,我想知道是否有更直接的方式.显然,NumPy索引不适用于SciPy的稀疏包.

import scipy.sparse as sp
import scipy.sparse.linalg  as la
import numpy as np
import matplotlib.pyplot as plt

#discretize x-axis
N = 11
x = np.linspace(-5,5,N)
print(x)
V = x * x / 2
h = len(x)/(N)
hi2 = 1./(h**2)
#discretize Schroedinger Equation, i.e. build 
#banded matrix from difference equation
C0 = np.ones(N)*30. + V
C1 = np.ones(N) * -16.
C2 = np.ones(N) * 1.
diagonals = np.array([-2,-1,0,1,2])
H = sp.spdiags([C2, C1, C0,C1,C2],[-2,-1,0,1,2], N, N)
H *= hi2 * (- 1./12.) …
Run Code Online (Sandbox Code Playgroud)

python math linear-algebra sparse-matrix

18
推荐指数
1
解决办法
2万
查看次数

python - 如何检查矩阵是否稀疏

我有一个矩阵,我想检查它是否稀疏.

我尝试过的事情:

  1. 实例方法:

    if isinstance(<matrix>, scipy.sparse.csc.csc_matrix):
    
    Run Code Online (Sandbox Code Playgroud)

如果我确切地知道我要检查哪个稀疏类,这可以正常工作.

  1. getformat方法:但它假设我的矩阵是稀疏的并给出格式

但我想要一种方法来了解矩阵是否稀疏,并且无论哪个稀疏类都应该工作.

请帮助我.

python class matrix sparse-matrix

17
推荐指数
1
解决办法
5835
查看次数

scipy csr_matrix:了解indptr

每过一段时间,我去操纵csr_matrix,但我总是忘了怎样的参数indices,并indptr共同构建一个稀疏矩阵.

我正在寻找一个清晰直观的解释,说明在使用符号定义稀疏矩阵时如何与参数和参数进行indptr交互.dataindicescsr_matrix((data, indices, indptr), [shape=(M, N)])

我可以从scipy文档中看到该data参数包含所有非零数据,并且该indices参数包含与该数据相关联的列(因此,在文档中给出的示例中indices等于col).但是我们怎么能用清晰的语言解释indptr参数呢?

python scipy sparse-matrix

17
推荐指数
1
解决办法
3267
查看次数