我有一个csr_matrix,假设我调用了:
import scipy.sparse as ss
mat = ss.csr.csr_matrix((50, 100))
现在我想修改这个矩阵上的一些值。我打电话给:
mat[0,1]+=1
我得到了:
SparseEfficiencyWarning: Changing the sparsity structure of a csr_matrix is expensive. lil_matrix is more efficient.
我只需要在矩阵创建之后设置几个值(最后是矩阵的比例)。稍后,我将只读取列或对整个矩阵执行逐个元素的操作(如.log1
复制参数在枕稀疏数组构造中的作用是什么?
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
我试图解决一个马尔可夫链问题,在这个问题中,转移矩阵包含大约15万行和列,但是它是稀疏的(只有大约45万个元素是非零的)。
我注意到,试图从这样大小的csr_matrix数组构造np.zeros矩阵会导致Killed: 9错误:
In [139]: N = 150000
In [140]: T = np.zeros((N, N))
In [142]: import scipy.sparse
In [143]: _T = scipy.sparse.csr_matrix(T)
Killed: 9
是否有可能构造这样大小的csr_matrix?我是否需要将矩阵T作为一个csr_matrix来启
我正在使用一个连通性矩阵,它是图形数据结构的表示。NxM矩阵对应于具有M个顶点的N条边(它的边可能比顶点多,这就是我使用scipy的csr_matrix的原因)。在连通性矩阵中,边的“起点”用"-1“表示,终点用"1”表示。所有其他值都为0,因此每行只有2个非零值。
我需要集成一个“细分”方法,它将有效地更新连接矩阵。目前,我正在将连接矩阵转换为密集矩阵,以便添加新的行/列并更新旧的行/列。我正在转换到密集矩阵,因为我还没有找到一个解决方案来找到列索引来更新旧的边连接(没有等价的scipy.where),并且csr表示不允许我通过索引更新值。
from numpy import
我有一个CSC格式的矩阵A,其中我只索引了一列
b = A[:,col]
产生(Nx1)矩阵。我想做的是:
v = M * b
其中M是CSR中的( n )矩阵。结果v是一个(Nx1)CSR-矩阵.我需要迭代v中的值(实际上不包括0),并检索满足特殊条件的一个元素的索引(注意:没有选择稀疏矩阵格式来适应特定的操作,但是一般的矩阵x矩阵-积应该是CSR * CSC最快的,对吗?)
问题是,迭代CSR格式向量(0 <i< n: vi,0)中的条目非常慢,实际上我浪费了相当多的内存,因为v不再稀疏。
有人能告诉我如何执行这些操作吗?这样我就可以快速地迭代结果向量,从而使与复制相关的内存
我不知道我做错了什么,但是与numpy数组相比,行索引csr_matrix似乎慢了大约2倍(参见下面的代码)。
csr矩阵的行索引不应该比密集矩阵更快,因为只有很少的非零元素被提取,如下所示。
是否有更快的技巧使行索引更快对已参与的csr矩阵?
import numpy as np
import timeit
from scipy.sparse import csr_matrix
# Generate random matrix
A = np.random.rand(5000, 1000)
# Make A sparse
A[:, 4:] =0
# Create sparse matri
如何对scipy稀疏矩阵的行进行混洗? 有一个scikitlearn.utils.shuffle,但它返回一个新的矩阵,因此对于非常大的稀疏矩阵,混洗不是就地完成的,而是复制矩阵。 有numpy.random.Generator.shuffle,但它似乎是work only for CSR matrices。 如何有效地打乱scipy稀疏矩阵的行数,不管它是以什么格式存储在内存中的?
在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
我有一个稀疏矩阵,目前我正在枚举每一行,并根据每一行的信息执行一些计算。每一行都完全独立于其他行。然而,对于大的矩阵,这个代码非常慢(大约需要2个小时),而且我也不能将矩阵转换为密集的矩阵(限于8 8GB )。
import scipy.sparse
import numpy as np
def process_row(a, b):
"""
a - contains the row indices for a sparse matrix
b - contains the column indices for a sparse matrix
我有一个大小为(1000,10000)的2D稀疏矩阵"unknown_tfidf",它的类型是:
<class 'scipy.sparse.csr.csr_matrix'>
我需要得到这个矩阵的y索引,其中的值是'1',我正在尝试以下方法(不确定它是否是最优的,甚至是正确的!)但我面临一个错误:
y=[row.index(1.0) for index, row in enumerate(unknown_tfidf) if int(1.0) in row]
错误是:
ValueError: The truth value of an a
我正在处理大型稀疏二进制矩阵。我使用Scipy稀疏矩阵实现来压缩它们。从Jaccard distance中计算scipy.spatial.distance不支持对稀疏矩阵的直接操作,因此:
将整个稀疏矩阵转换为密集矩阵,然后作为向量对每一行进行操作,这是内存不足的。
或
通过稀疏循环,使用getrow()抓取每一行并进行操作。
或
编写我们自己的实现来处理稀疏矩阵。
为了使事物透视图,下面是示例代码:
import scipy.spatial.distance as d
import numpy as np
from scipy.sparse import
下面的代码运行得太慢了,尽管一切似乎都是矢量化的。
from numpy import *
from scipy.sparse import *
n = 100000;
i = xrange(n); j = xrange(n);
data = ones(n);
A=csr_matrix((data,(i,j)));
x = A[i,j]
问题似乎是索引操作是作为python函数实现的,调用A[i,j]会导致以下分析输出
500033 function calls in 8.718 CPU seconds
Ordered by: internal time
我想将sagemaker的kMeans算法应用于一个稀疏矩阵,该矩阵是用TfidfVectorizer从sklearn的库中获得的。 理想情况下,我希望将输入数据以稀疏矩阵scipy.sparse.csr.csr_matrix的形式提供给Sagemaker的kMeans实现,但当我这样(kmeans.fit(kmeans.record_set(train_data)))时,我会得到以下错误: TypeError: must be real number, not csr_matrix 当然,如果我传递一个密集矩阵,算法将会工作(train_data.toarray()),但它需要的内存量是巨
我正在使用Python和Scipy库来创建一个稀疏矩阵,特别是csr_matrix (压缩稀疏行矩阵)。矩阵很大,大约有70000*70000个元素。我将矩阵构建为2d数组,然后构造csr_matrix,将2d数组作为参数。构造一个非常稀疏的大小矩阵是很容易的,没有任何问题。
当给出一个密度更大的2d数组(更不用说零个元素)时,这个问题就会出现,这个过程会被一个错误打断:
值错误:无法识别的csr_matrix构造函数用法
我尝试在交互式Python环境中构建一个大小相同的密集矩阵,并得到了完全相同的错误。
from scipy import sparse
a = [[10 for i