标签: sparse-matrix

从稀疏矩阵中提取i和j

我可以使用i,j和x的向量定义稀疏矩阵:

i <- c(1,3:8)
j <- c(2,9,6:10)
x <- 7 * (1:7)
(A <- sparseMatrix(i, j, x = x))
Run Code Online (Sandbox Code Playgroud)

我想提取i,j以及x从该稀疏矩阵的元素,所以我可以重新创建另一个包中的矩阵.这是容易ix:

i <- A@i + 1
x <- A@x
Run Code Online (Sandbox Code Playgroud)

(注意,i和x的顺序已经改变,但它们的相对关联是相同的:i = 4仍然在x = 21的同一位置)

但是,稀疏矩阵的最后一个元素是p:"指针的数字(整数值)向量,每列(或行)一个,到列(或行)中元素的初始(从零开始)索引. "

如何转换A@iA@p转换为j用于定义矩阵的原始元素?

r sparse-matrix

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

将稀疏矩阵限制为scipy中的子空间

说我有一个方形的NxN crs矩阵辣.我想通过保持M个索引(由N个布尔数组给出,其中M为真)将该矩阵限制为子空间.这应该给我一个MxM稀疏矩阵.

因此,显然,一种方法是将系数提取为数据数组和两个坐标数组,并使用排序重新编号坐标.这很痛苦,有点难看.

是不是有功能,或者是图书馆调用呢?

python scipy sparse-matrix

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

点云中的局部最大值

我有一个点云 C,其中每个点都有一个关联的值。假设这些点在二维空间中,所以每个点都可以用三元组 (x, y, v) 表示。

我想找到局部最大值点的子集。也就是说,对于某个半径 R,我想找到 C 中点 S 的子集,使得对于 S 中的任何点 Pi(具有值 vi),在距离 Pi 的 R 距离内,C 中没有点 Pj 的值 vj 为大于 vi。

我知道如何在 O(N^2) 时间内做到这一点,但这似乎很浪费。有没有一种有效的方法来做到这一点?


旁注:

  • 这个问题的根源是我试图在一个稀疏矩阵中找到局部最大值,所以在我的例子中 x, y 是有序整数 indeces - 如果这简化了问题,请告诉我!
  • 如果解决方案仅适用于曼哈顿距离或其他任何问题,我非常高兴。
  • 我在 python 中,所以如果有某种很好的矢量化 numpy 方法来做到这一点,那就太好了。

numpy sparse-array kdtree sparse-matrix computational-geometry

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

如何在 JSON 中表示具有空元素的数组?

我在 JavaScript 中有一个数组,如下所示:

var pattern = [ ["C5", 3], , , , , , , , ["C5", 3], , , ] 
Run Code Online (Sandbox Code Playgroud)

我想将它存储在这样的 json 文件中:

{
  "pattern": [
               ["C5", 3], , , , , , , , ["C5", 3], , ,
             ]
}
Run Code Online (Sandbox Code Playgroud)

JSONLint 告诉我这个:

Parse error on line 6:
...        ],        ,        ,        
---------------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['
Run Code Online (Sandbox Code Playgroud)

所以我明白我不能让逗号之间的空格为空。什么类似于空,但被 JSON 标准接受?

这个模式文件是我正在制作的 Javascript Music Tracker 的一部分,它类似于脉冲跟踪器,我希望 json 文件尽可能干净。

javascript arrays json sparse-matrix

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

MATLAB 中的稀疏矩阵乘法与 spfun

我有一个密列矩阵y的大小(m,1)和稀疏矩阵x大小(m,n)
我想使用y和 的每一列进行元素乘法x
生成的稀疏矩阵的大小仍然为(m,n)
Sparse matrixx加载到内存时大约为 10GB。
可以spfun帮助我以高效记忆的方式实现我的目标吗?

我很难理解它背后的逻辑。

谢谢你。

matlab sparse-matrix elementwise-operations

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

检查Scipy稀疏矩阵的密度

有没有一种很好的方法来测量或检查scipy.sparse矩阵的密度?

例如:

import scipy.sparse
import numpy as np

row  = np.array([0,3,1,0])
col  = np.array([0,3,1,2])
data = np.array([4,5,7,9])

mat = scipy.sparse.coo_matrix((data,(row,col)), shape=(4,4))
print mat.todense()

[[4 0 9 0]
 [0 7 0 0]
 [0 0 0 0]
 [0 0 0 5]]
Run Code Online (Sandbox Code Playgroud)

也许返回的东西可以让我获得总体密度的一般统计信息,例如每行的平均占用率(即第一行占2/4值,第二行占1/4,第三行占0/4,第四行占1/4因此平均占用率/密度将为1/4),stddev,方差等。也许可以采用一种更好的密度度量标准,而该密度度量标准不依赖于矩阵的大小(假设其足够大)。

python numpy scipy sparse-matrix

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

用户、项目对的稀疏矩阵实现

我有一个包含数百万条记录的数据集,其中包含 100,000 个用户,他们购买了 20,000 件商品的子集,格式如下:

<user1, item1>
<user1, item12>
...
<user100,000, item>
Run Code Online (Sandbox Code Playgroud)

我需要跟踪一个大小(物品 x 用户)=(20,000 x 100,000)的矩阵,如果用户购买了物品,则为 1,否则为 0。目前我使用的是传统的 numpy 数组,但在后面的步骤中处理它需要很长时间。任何人都可以推荐一种使用 SciPy 稀疏矩阵之一的有效方法,它仍然允许基于索引搜索矩阵?

numpy matrix scipy sparse-matrix python-2.7

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

R作为脚本运行时在validObject(.Object)中出错,但在控制台中则不行

以下代码在R控制台(R 3.3.0)中正常工作:

m = system.file("external/pores_1.mtx", package = "Matrix")
x = Matrix::readMM(m)
Run Code Online (Sandbox Code Playgroud)

我可以把它放在一个脚本中,它可以在R控制台中正常运行:

source("test.R")
Run Code Online (Sandbox Code Playgroud)

然而,当我执行它Rscript --vanilla test.R或者Rscript test.R,我得到一个错误:

Error in validObject(.Object) : 
  invalid class “dgTMatrix” object: Not a valid 'Mnumeric' class object
Calls: <Anonymous> -> new -> initialize -> initialize -> validObject
Execution halted
Run Code Online (Sandbox Code Playgroud)

我不知道这是否与该特定功能有关.我猜这与Rscript的工作原理有关,但我以前用过各种其他库和函数,从未见过这样的东西.知道发生了什么事吗?

r sparse-matrix rscript

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

Python:稀疏矩阵乘法和numpy.dot()之间的不一致

Ubuntu16.04_64bit + Python3.5.2 + numpy1.13.3 + scipy1.0.0当我处理a scipy.sparse.csc.csc_matrix和a之间的矩阵乘法时,我遇到了这个问题 numpy.ndarray.我会在这里给出一个例子:

import numpy as np
import scipy.sparse

a = np.random.random(1000,1000)
b = np.random.random(1000,2000)
da = scipy.sparse.csc.csc_matrix(a)
db = scipy.sparse.csc.csc_matrix(b)

ab = a.dot(b)
dadb = da.dot(db)
dab = da.dot(b)
Run Code Online (Sandbox Code Playgroud)

然后差异看起来像这样:

In [31]: np.sum(dadb.toarray() != ab)
Out[31]: 1869078

In [33]: np.sum(dab != dadb.toarray())
Out[33]: 0

In [34]: np.sum(dab != ab)
Out[34]: 1869078
Run Code Online (Sandbox Code Playgroud)

为什么?它们之间的区别是什么?怎么办呢?

python numpy scipy sparse-matrix

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

通过Rcpp传递Armadillo稀疏矩阵

这个问题关系到这个这个。此处的区别在于,我没有传递Rcpp类型(例如NumericVector或)NumericMatrix,而是传递arma::sp_mat

有什么方法可以将A传递sp_mat给C ++,修改其值,并使更改显示在R中的原始对象中吗?

可以使用来完成NumericMatrix,例如:

cppFunction("void frob(NumericMatrix& x)
{
    for(NumericMatrix::iterator it = x.begin(); it != x.end(); ++it)
    {
        if(*it != 0) *it = *it + 5;
    }
}")

M <- Matrix(0, 5, 1, sparse=TRUE)
M[1] <- 1.2345

m <- as.matrix(M)

frob(m)
m
       #[,1]
#[1,] 6.2345
#[2,] 0.0000
#[3,] 0.0000
#[4,] 0.0000
#[5,] 0.0000
Run Code Online (Sandbox Code Playgroud)

相同的技术适用于arma::mat密集矩阵。但是对于稀疏矩阵,它不起作用:

cppFunction("void frob2(arma::sp_mat& x)
{
    for(arma::sp_mat::iterator it = x.begin(); it != x.end(); …
Run Code Online (Sandbox Code Playgroud)

r sparse-matrix armadillo rcpp

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