繁体   English   中英

稀疏数组的numpy向量列表

[英]list of numpy vectors to sparse array

我有一个格式的numpy向量列表:

    [array([[-0.36314615,  0.80562619, -0.82777381, ...,  2.00876354,2.08571887, -1.24526026]]), 
     array([[ 0.9766923 , -0.05725135, -0.38505339, ...,  0.12187988,-0.83129255,  0.32003683]]),
     array([[-0.59539878,  2.27166874,  0.39192573, ..., -0.73741573,1.49082653,  1.42466276]])]

这里,列表中只显示了3个向量。 我有100 ...

一个向量中的最大元素数约为1000万

列表中的所有数组都具有不等数量的元素,但最大元素数是固定的。 是否有可能在python中使用这些向量创建一个稀疏矩阵,以便我用零代替小于最大大小的向量的元素?

试试这个:

from scipy import sparse
M = sparse.lil_matrix((num_of_vectors, max_vector_size))

for i,v in enumerate(vectors):
     M[i, :v.size] = v

然后看一下这个页面: http//docs.scipy.org/doc/scipy/reference/sparse.html

lil_matrix格式适用于构造矩阵,但是在对它们进行操作之前,您需要将其转换为不同的格式,如csr_matrix

在这种方法中,您将thresold下面的元素替换为0 ,然后从中创建一个稀疏矩阵。 我建议coo_matrix因为它是根据你的目的转换到其他类型最快的。 然后你可以使用scipy.sparse.vstack()来构建你的矩阵,计算列表中的所有元素:

import scipy.sparse as ss
import numpy as np

old_list = [np.random.random(100000) for i in range(5)]

threshold = 0.01
for a in old_list:
    a[np.absolute(a) < threshold] = 0
old_list = [ss.coo_matrix(a) for a in old_list]
m = ss.vstack( old_list )

有点令人费解,但我可能会这样做:

>>> import scipy.sparse as sps
>>> a = [np.arange(5), np.arange(7), np.arange(3)]
>>> lens = [len(j) for j in a]
>>> cols = np.concatenate([np.arange(j) for j in lens])
>>> rows = np.concatenate([np.repeat(j, len_) for j, len_ in enumerate(lens)])
>>> data = np.concatenate(a)
>>> b = sps.coo_matrix((data,(rows, cols)))
>>> b.toarray()
array([[0, 1, 2, 3, 4, 0, 0],
       [0, 1, 2, 3, 4, 5, 6],
       [0, 1, 2, 0, 0, 0, 0]])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM