标签: sparse-matrix

NumPy:将稀疏矩阵从 R 导入 Python

我在 R 中有一个非常大且稀疏的矩阵,是使用“Matrix”包创建的,我想在 python + numpy 中处理。R 对象采用 csc 格式,如果我使用 Matrix 包中的 writeMM 函数将其导出,则输出如下所示:

%%MatrixMarket matrix coordinate real general
4589 17366 160441
22 1 5.954510725783322
36 1 29.77255362891661
41 1 23.81804290313329
74 1 5.954510725783322
116 1 59.54510725783322
127 1 11.909021451566645
159 1 17.863532177349967
Run Code Online (Sandbox Code Playgroud)

其中第一列是行,第二列是列,第三列是值。

我想知道如何将其导入到 python 中。我看到 scipy 有一个用于操作列压缩稀疏矩阵的模块,但它没有从文件创建稀疏矩阵的功能。

numpy matrix scipy sparse-matrix

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

MATLAB 中的 spdiags() 转换为 Python

我正在尝试将 MATLAB 实现转换为 Python 3 实现。我发现了一个我不理解的函数 spdiags(),并且也不知道如何将它翻译成 Python 3。

有关该函数的 MATLAB 文档位于: http://www.mathworks.com/help/matlab/ref/spdiags.html

有关同名函数的 Scipy 文档位于: http://docs.scipy.org/doc/scipy/reference/ generated/scipy.sparse.spdiags.html

MATLAB 函数的作用是什么?是否有相同返回值的 Python 实现?

python matlab function scipy sparse-matrix

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

快速构建非常大的稀疏矩阵

如何加速构造一个非常大的稀疏矩阵,其中每行只有一个非零元素对应于一列,并且每列有相同数量(平均)的非零元素?

N1我有一个大小为×的巨大(稀疏)矩阵N2,例如大小为1e8× 5e4,其中每一行仅包含一个非零元素,该元素是随机选择的,而不用 替换numpy.random.choice(numpy.arange(N2),size=N2,replace=False)

据我所知,构建矩阵的唯一方法是循环numpy.random.choice()运行。由于非常大,为了加快速度,我正在使用:forN1N1scipy.weave

import numpy as np
from scipy import weave
from scipy.weave import converters
import scipy.sparse as sparse # Cython import

def weave_sparse(N1,N2,w):
    conn_matrix = sparse.dok_matrix((N1,N2))
    fac = lambda N : np.random.choice(np.arange(N), size=N, replace=False)[0]
    code = """
           int i;
           py::tuple arg(1);
           arg[0] = N2;
           for(i=0;i<N1;i++) conn_matrix[i,(int) fac.call(arg)] = w;
           """
    weave.inline(code,['conn_matrix','N1','N2', 'w', 'fac'],
                 compiler='gcc',extra_compile_args=['-std=c++11 -Ofast'],force=0)
    return conn_matrix
Run Code Online (Sandbox Code Playgroud)

尽管如此,对于N1接近1e6和超越代码来说,它需要很长时间才能完成。我怀疑可能有一种更有效的方法来构建稀疏矩阵。还有其他策略可以在人类可读的时间内加速和构建矩阵吗?

for-loop scipy sparse-matrix python-2.7

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

稀疏矩阵的逐元素绝对值

如何获得稀疏复矩阵的逐元素绝对值?一般来说,是否可以使用用户定义的函数将一个矩阵映射到另一个矩阵?

python scipy sparse-matrix

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

Python - Pandas 数据帧串联内存中的气球

我的原始数据集是针对药物不良反应的大量 JSON 对象列表。在每个 JSON 对象中,我们可以有几种以 rxcui id 形式给出不良反应的药物。

我获取了 JSON 对象列表并提取了我们需要的重要数据(例如该人是否死亡)和 rxcui,并将它们展平为最多 2 层深度的 JSON 对象。我们会有这样的东西:

{
  "serious": 1,
  "drug": [
    "DrugA",
    "DrugB",
    "DrugC"
  ],
  "rxcui": [
    100,
    200,
    300
  ]
}
Run Code Online (Sandbox Code Playgroud)

我必须弄清楚如何将其放入一个数组中,以便将其提供给机器学习算法。所以我的想法是使用one-hot编码。

这就是我使用 countVectorizer 的原因,这样我就可以对所有这些子列表进行矢量化

我正在尝试连接几个 pandas 数据帧(有些是稀疏数据帧,有些是常规数据帧),它们是某些数据的 onehot 编码。我检查了所有文件(我还将它们腌制到硬盘上),没有一个文件大于 81MB。但一旦我开始将它们连接起来,它们就会膨胀到超过 29 GB。这怎么可能?

我所有的 df 看起来都是这样的:

Label0  Label1  Label2  Label3...  Label999
1       1       0       0     ...  0
1       1       0       1     ...  1
.
.
.
Run Code Online (Sandbox Code Playgroud)

我像这样运行 concat:

x = pandas.concat([x, drugcharacterization, occurcountry, reactionmeddrapt, reactionmeddraversionpt, reactionoutcome, rxcui],axis=1, copy=False)
Run Code Online (Sandbox Code Playgroud)

我还可以将我尝试在内存中轻松连接的所有子数据帧放入其中。一旦我这样做,它会爆炸的原因是什么? …

python sparse-matrix pandas

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

通过 API 请求高效发送稀疏矩阵 numpy

我需要通过 http 和 JSON 在多个服务器到服务器的通信中发送一些巨大的矩阵(全是 0)。

我正在Python 3.x中使用 numpy 和 scipy。

有没有标准的工具方法可以做到这一点?

我想我可以发送索引,并以某种方式在第二个服务器中重建矩阵以获得完整的矩阵,但我想避免使用自定义代码来重新发明轮子。

先感谢您。

python numpy scipy sparse-matrix

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

加速 R 中的稀疏矩阵乘法

我正在尝试使用 R 中的 %*% 函数将矩阵(由少数 1 和大部分 O 组成)与向量相乘,此过程需要大量时间。有什么办法可以让它更快吗?

谢谢

r sparse-matrix matrix-multiplication

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

如何在Python中生成随机稀疏埃尔米特矩阵?

我想在 python 中生成给定形状的随机稀疏埃尔米特矩阵。我怎样才能高效地做到这一点?有没有内置的Python函数可以完成这个任务?

我已经找到了随机稀疏矩阵的解决方案,但我也希望该矩阵是厄米特矩阵。这是我找到的随机稀疏矩阵的解决方案

import numpy as np
import scipy.stats as stats
import scipy.sparse as sparse
import matplotlib.pyplot as plt
np.random.seed((3,14159))

def sprandsym(n, density):
    rvs = stats.norm().rvs
    X = sparse.random(n, n, density=density, data_rvs=rvs)
    upper_X = sparse.triu(X) 
    result = upper_X + upper_X.T - sparse.diags(X.diagonal())
    return result

M = sprandsym(5000, 0.01)
print(repr(M))
# <5000x5000 sparse matrix of type '<class 'numpy.float64'>'
#   with 249909 stored elements in Compressed Sparse Row format>

# check that the matrix is symmetric. The difference should …
Run Code Online (Sandbox Code Playgroud)

python sparse-matrix

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

scipy稀疏矩阵:索引超出范围

我想针对大型语料库运行 textrank(仅我的开发环境使用 17K 句子)

因此我使用了 scipy dok_matrix。然而,当将第一个值分配给我的稀疏矩阵(即similarity_matrix[1][0])时,尽管在 pycharm 调试中看到我的 dok_matrix 的大小为 17K x 17k,但我收到以下错误。

IndexError: row index (1) out of range

我做错了什么?

 def _score_generator(self, sentences, sentence_vectors):
    sentence_count = len(sentences)
    similarity_matrix = dok_matrix((sentence_count, sentence_count), dtype=np.float32)
    for i in range(len(sentences)):
        for j in range(len(sentences)):
            if i != j:
                similarity_matrix[i][j] = cosine_similarity(sentence_vectors[i].reshape(1, 100), sentence_vectors[j].reshape(1, 100))[0, 0]


    nx_graph = nx.from_scipy_sparse_matrix(similarity_matrix)
    scores = nx.pagerank(nx_graph)
    return scores
Run Code Online (Sandbox Code Playgroud)

python nlp scipy sparse-matrix

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

R Matrix包:稀疏矩阵的dgCMatrix类中的属性的含义

我看过Matrix包和他们的幻灯片。我试图理解课堂上争论背后的直觉和含义是什么dgCMatrix。我明白那个

\n\n
    \n
  • @i给出矩阵中非零条目的从零开始的行索引.
  • \n
  • @j给出矩阵中非零条目的从零开始的列索引.
  • \n
  • @x给出该位置处的非零元素(i,j)
  • \n
\n\n

但是我不明白指针的含义@p。文档说

\n\n
\n

数字(整数值)指针向量,每一列(或行)一个,指向列(或行)中元素的初始(从零开始)索引。

\n
\n\n

这信息不是很丰富。在同一页面的“详细信息”部分中,他们解释了更多信息

\n\n
\n

如果缺少ior ,则必须是第一个元素为零的非递减整数向量。它提供行或列索引的压缩表示或 \xe2\x80\x9cpointer\xe2\x80\x9d 表示(以缺失者为准)。的扩展形式,其中, 用作(从 1 开始的)行或列索引。jpprep(seq_along(dp),dp)dp <- diff(p)

\n
\n\n

这对我来说绝对是不直观的。有人可以简单解释一下p代表什么吗?我已经创建了一个最小工作示例,但请随意创建一个新示例。

\n\n
\n\n

最小工作示例

\n\n
# Define non-zero values and their row/col indeces\ni_indeces <- c(1, 3, 4, 6, 8, 9)\nj_indeces <- c(2, 9, 6, 3, 9, 10)\nvalues …
Run Code Online (Sandbox Code Playgroud)

pointers r matrix sparse-matrix

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