Incanter是否支持稀疏矩阵(乘法,分解,求解)?
我在python中使用稀疏矩阵输出,我需要将这个稀疏矩阵存储在我的硬盘中,我该怎么办?如果我应该创建一个数据库,那我该怎么办?这是我的代码:
import nltk
import cPickle
import numpy
from scipy.sparse import lil_matrix
from nltk.corpus import wordnet as wn
from nltk.corpus import brown
f = open('spmatrix.pkl','wb')
def markov(L):
count=0
c=len(text1)
for i in range(0,c-2):
h=L.index(text1[i])
k=L.index(text1[i+1])
mat[h,k]=mat[h,k]+1//matrix
cPickle.dump(mat,f,-1)
text = [w for g in brown.categories() for w in brown.words(categories=g)]
text1=text[1:500]
arr=set(text1)
arr=list(arr)
mat=lil_matrix((len(arr),len(arr)))
markov(arr)
f.close()
Run Code Online (Sandbox Code Playgroud)
我需要将这个"mat"存储在一个文件中,并且应该使用坐标来访问矩阵的值.
稀疏矩阵的结果是这样的:`稀疏矩阵的结果是这样的:
(173, 168) 2.0 (173, 169) 1.0 (173, 172) 1.0 (173, 237) 4.0 (174, 231) 1.0 (175, 141) 1.0 (176, 195) 1.0
Run Code Online (Sandbox Code Playgroud)
但是当我将它存储到一个文件中并阅读相同的内容时我会这样:
(0, 68) 1.0 …Run Code Online (Sandbox Code Playgroud) 我正在使用python中的大型稀疏矩阵(文本生成的文档特征矩阵).它需要相当多的处理时间和内存来咀嚼这些,我想稀疏矩阵可以提供一些改进.但是我担心使用稀疏矩阵库会使插入其他python(和R,通过rpy2)模块变得更加困难.
穿过这座桥的人是否已经提供了一些建议?在性能,可伸缩性和兼容性方面,在python/R中使用稀疏矩阵的优缺点是什么?
我希望逐元素二元运算适用于大型逻辑向量.这些向量的内容是男子气概,因此出于性能考虑,最好使用稀疏矩阵.如果我这样做,结果矩阵是不正确的.
Examble
A = logical([0;1;0;0]);
B = logical([0 0 1 1]);
C = bsxfun(@and,A,B)
Run Code Online (Sandbox Code Playgroud)
在这种情况下C是
C =
0 0 0 0
0 0 1 1
0 0 0 0
0 0 0 0
Run Code Online (Sandbox Code Playgroud)
如果我使用稀疏矩阵C是
C = full(bsxfun(@and,sparse(A),sparse(B)))
C =
0 0 0 0
1 1 1 1
0 0 0 0
0 0 0 0
Run Code Online (Sandbox Code Playgroud)
这显然是错的.
我是否监督某事或这是一个Matlab错误.
例如,
A = [ -1 0 -2 0 0
2 8 0 1 0
0 0 3 0 -2
0 -3 2 0 0
1 2 0 0 -4];
Run Code Online (Sandbox Code Playgroud)
如何获得每行的第一个非零元素的向量?
Matlab使用稀疏命令计算对角矩阵的倒数需要0.02秒.
P = diag(1:10000);
P = sparse(P);
tic;
A = inv(P);
toc
Run Code Online (Sandbox Code Playgroud)
但是,对于Python代码,它需要永远 - 几分钟.
import numpy as np
import time
startTime = time.time()
P = np.diag(range(1,10000))
A = np.linalg.inv(P)
runningTime = (time.time()-startTime)/60
print "The script was running for %f minutes" % runningTime
Run Code Online (Sandbox Code Playgroud)
我试图使用Scipy.sparse模块,但它没有帮助.运行时间下降,但只有40秒.
import numpy as np
import time
import scipy.sparse as sps
import scipy.sparse.linalg as spsl
startTime = time.time()
P = np.diag(range(1,10000))
P_sps = sps.coo_matrix(P)
A = spsl.inv(P_sps)
runningTime = (time.time()-startTime)/60
print "The script was running for %f …Run Code Online (Sandbox Code Playgroud) 我正在用Python做一些文本分析工作.不幸的是,我需要切换到R才能使用特定的软件包(遗憾的是,软件包无法轻松地在Python中复制).
目前,文本被解析为二元组计数,缩减为大约11,000个双字母的词汇,然后存储为字典:
{id1: {'bigrams':[(bigram1, count), (bigram2, count), ...]},
id2: {'bigrams': ...}
Run Code Online (Sandbox Code Playgroud)
我需要将它放入R中的dgCMatrix中,其中行是id1,id2,...并且列是不同的双字母组合,以便单元格表示该id-bigram的"计数".
有什么建议?我想把它扩展到一个巨大的CSV,但这似乎超级低效加上由于内存限制可能不可行.
如何提取稀疏矩阵的主对角线?矩阵在scipy.sparse中创建.我想要等效的np.diagonal()但是对于稀疏矩阵.
我正在撰写文章:Maksims N. Volkovs和Guang Wei Yu 论文链接中有关推荐系统中二进制反馈的有效潜在模型.
它是通过使用来自协同过滤方法的邻居相似性信息,使用基于模型的方法,SVD来产生推荐.
所以基本上作者不是R(M users * N songs)像在SVD中那样分解用户评级矩阵进行推荐,而是分解用户歌曲预测矩阵S(M users * N songs)或稀疏矩阵S(M users * top-k predicted songs).
我们得到了,
Ur,$r,Vr = sklearn.utils.extmath.randomized_svd(', n_components = 1000)
Run Code Online (Sandbox Code Playgroud)
哪里 r = SVD rank = n_components.
我们确实使用Ur和 生成预测Vr:
S(u, v) = Ur(u, :) * Vr(v, :).T
Run Code Online (Sandbox Code Playgroud)
哪里 u = user, v = item v , T = transpose
我S(M*top-k)使用协同过滤方法生成矩阵并馈送到randomized_svd
但是通过上述方法产生的预测不会产生准确性(truncated mAP@500我正在使用的性能测量,mAP = 0.01),而作者已经为相同的kaggle百万歌曲挑战数据挑战链接产生了0.14的良好mAP …
我想以批量方式从TensorFlow中的DNC实现中实现此公式.
使用批量密集张量,它非常简单.
# w [B, N], p [B, N], L [B, N, N], B=batch_size
dot_prod = tf.batch_matmul(tf.expand_dims(w, axis=2), tf.expand_dims(p, axis=1))
one_prod = 1 - tf.expand_dims(w, 1) - tf.expand_dims(w, 2)
L = one_prod * pre_L + dot_prod
Run Code Online (Sandbox Code Playgroud)
有没有办法用稀疏张量实现这个?w,p和L是稀疏的,但TensorFlow缺乏稀疏批处理matmul和稀疏索引.
sparse-matrix ×10
python ×7
matlab ×4
matrix ×2
numpy ×2
r ×2
bsxfun ×1
clojure ×1
incanter ×1
pandas ×1
performance ×1
python-2.7 ×1
scikit-learn ×1
scipy ×1
sparse-array ×1
tensorflow ×1