[英]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.