我不知道我做错了什么,但是与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
我有大约10,000个稀疏矩阵,每个矩阵的大小为5万×5,平均密度为0.0004。对于每个循环(10000次),我将计算numpy数组并将其转换为csr_matrix,并将其附加到列表中。但是内存消耗与附加numpy数组一样高,但不像附加csr_matrices那样高。
如何减少内存消耗,同时将这些10K稀疏矩阵存储在内存中,以便进一步计算?
样本代码:
from scipy.sparse import csr_matrix
import numpy as np
sparse_matrices = []
for i in range(10000):
np_array = get_np
我有两个稀疏矩阵,其中第一个具有
<1x40 sparse matrix of type '<class 'numpy.intc'>'
with 10 stored elements in Compressed Sparse Row format>
第二个是:
<9x15426 sparse matrix of type '<class 'numpy.int64'>'
with 25 stored elements in Compressed Sparse Row form
我正在使用Sklearn决策树进行一些分类,我有两种类型的数据:分类数据和连续数据。我使用pd.get_dummies作为我的分类值,最终得到了90多个特性。当然,这是相当多的。
问题是,然后我迭代max_features参数以获得我的模型的最佳分数,并且拥有20多个特征太耗时了。所以我认为Sklearn可以为我的分类特征使用稀疏矩阵,而不是使用0和1的70列。
问题是: Sklearn能不能混合使用稀疏矩阵和规则数组?如果是,我该怎么做?目前我收到错误:setting an array element with a sequence
这里有一些代码来理解这个想法。我目前使用的是df_with
如何加快构建一个非常大的稀疏矩阵,其中每行对应于一列只有一个非零元素,而每列具有相等数量(平均)的非零元素?
我有一个大小为N1- by -N2的大型(稀疏)矩阵,例如大小为1e8-by-5e4的矩阵,其中每一行只包含一个非零元素,该元素是随机选择的,没有被numpy.random.choice(numpy.arange(N2),size=N2,replace=False)替换。
据我所知,构建矩阵的唯一方法是在for循环N1次中运行numpy.random.choice()。由于N1非常大,为了加快速度,我使用了scipy.weave
import numpy as np
from scip
我有需要转换为DOK格式的numpy数组。为什么这样做:
x = np.asarray([1, 0, 0])
y = scipy.sparse.dok_matrix(scipy.sparse.csr_matrix(x))
但这并不是:
x = np.asarray([1, 0, 0])
y = scipy.sparse.dok_matrix(x)
这会引发错误:"TypeError:预期秩<=2密集数组或矩阵。“
我在西西的文档中没有发现任何暗示我不能直接将数组转换成dok矩阵的东西。
我对计数数据的对数感兴趣,这些数据是我对文本数据进行计数得到的。我很想测试这种转换(标准化)是否有助于提高sklearn中模型的性能。
这就是我所拥有的:
TEXT = [data[i].values()[3] for i in range(len(data))]
from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer(min_df=0.01,max_df = 2.5, lowercase = False, stop_words = 'english')
import numpy as np
import scipy.sparse as scsp
from scipy.sparse import csr_matrix,lil_matrix
# create an empty numpy matrix
wi=np.empty((num_clusters*num_cluster_neurons, input))
for i in range(num_clusters*num_cluster_neurons):
temp_neuron_prob=dic_cluster_prob[dic_neuron_cluster[
scipy.sparse.lil_matrix对象似乎不会显式存储设置为0的值。其他稀疏矩阵,如csr_matrix,可以这样做。
考虑以下示例:
In [1]: from scipy.sparse import lil_matrix
In [2]: import numpy as np
In [3]: x = lil_matrix((5, 5), dtype=np.float32)
In [4]: x[3, 3] = 0
In [5]: x
Out[5]:
<5x5 sparse matrix of type '<class 'numpy.float32&
这段代码我在np.log2()上运行时出错。如果我给它输入的是tmp.data,而不是tmp,它就能工作。这导致我得出结论,np.log2()不能在scipy.sparse.csr.csr_matrix上工作,但可以在scipy.sparse.csr.csr_matrix上通过调用csr_matrix.data转换为ndarray。
唯一的问题是,下面我可以更改的代码期望得到一个scipy.sparse.csr.csr_matrix。我做什么好?
import numpy as np
from numpy.linalg import norm
import scipy
from scipy.s
我试图解决一个马尔可夫链问题,在这个问题中,转移矩阵包含大约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来启
我正在使用sklearn做机器学习,works.Here是我的两个变量:
>>> matrix
<1397x9576 sparse matrix of type '<type 'numpy.float64'>'
with 44655 stored elements in Compressed Sparse Row format>
>>> type(density)
<type 'list'>
>>> len(density)
1397
ma
我正在使用Python中的大型稀疏矩阵。矩阵的表示给出了存储元素的数量,例如
<100000x100000 sparse matrix of type '<type 'numpy.float64'>'
with 1244024860 stored elements in Compressed Sparse Row format>
我的问题是:如何让1244024860返回数字给我呢?,我想使用这个数字近似于非零元素的数量(即使有些存储的元素可能是零)。
对于较小的矩阵,我使用的是sparse_mat.count_nonzero()
使用@将稠密的numpy矩阵与稀疏的枕叶向量相乘是非常低效的。它似乎完全没有利用矢量的稀疏性。
说我们有
A = np.eye(5000)
x = np.eye(5000)[333]
x = scipy.sparse.coo_matrix(x).T # make it a sparse vector
然后使用@进行乘法:
%timeit A @ x
8 ms ± 78.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
让我们自己写一个极其糟糕的稀疏乘法:
def mult_dense_with_sparse(A, x):
我希望给稀疏矩阵增加一个维度。在numpy中,这只是一个做[:,None]的问题。我尝试了reshape和resize,但没有任何成功。 以下是一些虚拟数据: from scipy.sparse import csr_matrix
data = [1,2,3,4,5,6]
col = [0,0,0,1,1,1]
row = [0,1,2,0,1,2]
a = csr_matrix((data, (row, col)))
a.reshape((3,2,1)) 最后一行给出了错误:ValueError: matrix shape must be two-dimensional。相反,执行