如何对scipy稀疏矩阵的行进行混洗? 有一个scikitlearn.utils.shuffle,但它返回一个新的矩阵,因此对于非常大的稀疏矩阵,混洗不是就地完成的,而是复制矩阵。 有numpy.random.Generator.shuffle,但它似乎是work only for CSR matrices。 如何有效地打乱scipy稀疏矩阵的行数,不管它是以什么格式存储在内存中的?
复制参数在枕稀疏数组构造中的作用是什么?
scipy.sparse.lil_matrix(arg1, shape=None, dtype=None, copy=False)
它似乎什么也没做!
当我从另一个矩阵构造稀疏矩阵并显式设置copy=False时,更改一个矩阵并不会改变另一个矩阵。
import scipy.sparse as sp
import numpy as np
A = sp.csc_matrix(np.array([[1,0],[0,0]]))
B = sp.csr_matrix(A, copy=False)
B[1,1] = 1 #editing B should chan
我想知道是否有一种方法可以简单地将密集向量添加到稀疏矩阵的所有行中,在scipy.sparse中表示为一个稀疏矩阵并返回一个稀疏矩阵,即只对稀疏矩阵的非零元素求和。
如果我这样做:
import numpy as np
import scipy.sparse as sp
W = sp.csr_matrix(np.array([[0,0,1],[0,1,0]]))
v = np.array([2,3,4])
然后
sum = W + v
sum显然是一个稠密矩阵,但它的零数之和也很明显。然而,当我试图做:
b = (W != 0)
s = b.multiply(v)
sum = W + s
我得
我正在做一个简单的稀疏矩阵指数,a**16,使用ciply-0.17。(注意,不是按元素进行乘法)。然而,在我的机器上(运行Debian和Ubuntu ),这比使用for循环或做一些类似a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a之类的傻事要慢十倍。这没有道理,所以我想我做错了什么,但是什么?
import scipy.sparse
from time import time
a=scipy.sparse.rand(2049,2049,.002)
print ("Trying exponentiation (a**16)")
t=time()
x=a**1
我用np.save('X', X)保存了一个枕形的csr矩阵。当我用np.load('X.npy')加载它时,我得到了以下内容:
array(<240760x110493 sparse matrix of type '<class 'numpy.float64'>' with 20618831 stored elements in Compressed Sparse Row format>, dtype=object)
但是,我不能使用索引(如X[0,0]或X[:10,:10] or X[0]都给出
如果我对numpy.zeros矩阵做同样的操作,它就能工作。但对于枕骨稀疏矩阵,它不起作用。为什么?
import scipy.sparse as sparse
import scipy as sp
a = sparse.lil_matrix((3,3), dtype=int)
a[0,0] = 0
a[1,1] = 1
a[2,2] = 2
b = a.sum(0)
bo = (-b).argsort()
ao = sp.take(a, bo, axis=1)
我知道错误:
ValueError: axis(=1) out of bounds
为什么这不起作用。有人能告诉我怎么修吗?或者用枕
我有一个文档术语矩阵,它与语料库中的术语同时出现,正如所解释的那样。
vocabulary = {} # map terms to column indices
data = [] # values (maybe weights)
row = [] # row (document) indices
col = [] # column (term) indices
import scipy
for i, doc in enumerate(bloblist):
for term in doc:
# get column index, add
我想把我的稀疏scipy.lil_matrix矩阵除以向量,再得到稀疏矩阵。假设我有2个lil_matrix变量和2个numpy数组a, b, c, d,如下所示
In [1]: a
Out[1]:
<4x3 sparse matrix of type '<class 'numpy.float64'>'
with 11 stored elements in LInked List format>
In [2]: b
Out[2]:
<4x1 sparse matrix of type '<class
我正在开发一个分类器,它将使用Target_Column中的非NaN值来预测应该替换所有NaN值的位置。但在训练我的模型之后,我在将预测分配给原始数据框架中的新列之前和之后对其进行了测试。这两个测试不匹配。对我来说,问题似乎是预测之后的转换之一是以某种方式打乱预测,使它们不再匹配。我已经尽可能多地删除了无关的代码。 ##############################################################
### Here is the initial data transformation for background ###
### You
我使用scipy.sparse.lil_matrix创建了一个稀疏矩阵
import scipy.sparse as sp
test = sp.lil_matrix((3,3))
test[0,0]=1
我可以遍历并打印非零元素,方法是:
for el in test:
print(el)
打印出(0, 0) 1.0。我如何访问这两条信息而不打印?换句话说,返回索引和值的lil_matrix元素有哪些合适的方法?执行el.data返回array([list([])], dtype=object)。
请注意,我使用的是lil_matrix,因为我需要在一个非常大的双for循环中将非
我想使用sklearn初始化300,000 x 300,0000稀疏矩阵,但它需要内存,就好像它不是稀疏的一样: >>> from scipy import sparse
>>> sparse.rand(300000,300000,.1) 它会给出错误: MemoryError: Unable to allocate 671. GiB for an array with shape (300000, 300000) and data type float64 这与我使用numpy进行初始化时的错误相同。 np.random.normal(size=[
我正在尝试使用scipy稀疏矩阵实现余弦相似度,因为我在使用正常矩阵(非稀疏)时遇到了内存错误。然而,我注意到当输入矩阵(观察值)较大时,稀疏和非稀疏矩阵的余弦相似度的内存大小(以字节为单位)几乎相同。我是不是做错了什么,或者,有没有办法解决这个问题?这里的代码中,输入有5%为1,95%为0。
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
from scipy import sparse
A = np.random.rand(10000, 1000)<.05
A_sparse = spa
在scipy中,当我将稀疏矩阵的一部分与只包含零的数组相乘时,结果是一个比以前少或同样稀疏的矩阵,尽管它应该是更多或同样稀疏的。将矩阵的部分设置为0或False的情况也是相同的:
>>> import numpy as np
>>> from scipy.sparse import csr_matrix as csr
>>> M = csr(np.random.random((8,8))>0.9)
>>> M
<8x8 sparse matrix of type '<type 'numpy
设矩阵A为对角矩阵,B为随机矩阵,均为N×N。我们希望利用矩阵A的稀疏性来优化点积,即点(B,A)。
但是,如果我们使用矩阵A的稀疏性来计算乘积,我们就看不到任何优势(而且速度要慢得多)。
import numpy as np
from scipy.sparse import csr_matrix
# Matrix sizes
N = 1000
#-- matrices generation --
A = np.zeros((N,N), dtype=complex)
for i in range(N):
A[i][i] = np.random.rand()
B = np.random