2012-01-25 174 views
0

请考虑使用类型为float的条目的n scipy.sparse.arrays的列表。我正在使用in Compressed Sparse Row format结构。如何从scipy.sparse.arrays列表中选择所有行的最大值?

my_list = [sparse_array_1, sparse_array_2, ... , sparse_array_n] 

每个sparse_array_i具有相同的长度。

我想要生成的是每行最大值的列表。所以这个例子

[array[0, array[4,  array[88, 
     3,  2,    287, 
     99,  1234,   0, 
     3],  0],   77] 

会导致

[88, 287, 1324, 77] 

这是可能的Python的方式?

回答

3

我不熟悉SciPy的稀疏矩阵,但如果他们的行为像其他python iterables那么mapzip组合将实现你想要什么:

>>> arr 
[[0, 3, 99, 3], [4, 2, 1234, 0], [88, 287, 0, 77]] 
>>> zip(*arr) 
[(0, 4, 88), (3, 2, 287), (99, 1234, 0), (3, 0, 77)] 
>>> map(max, zip(*arr)) 
[88, 287, 1234, 77] 
1

这里有两个稀疏矩阵答案:刚重复这个n-1次。

import numpy as np 
def spmax(X,Y): 
    # X,Y two csr sparse matrices 
    sX = X.copy(); sX.data[:] = 1 
    sY = Y.copy(); sY.data[:] = 1 
    sXY = sX+sY; sXY.data[:] = 1 
    X = X+sXY; X.data = X.data-1 
    Y = Y+sXY; Y.data = Y.data-1 
    maxXY = X.copy() 
    maxXY.data = np.amax(np.c_[X.data,Y.data],axis=1) 
    return maxXY 

虽然这很慢。希望他们会在某个时候在scipy.sparse中实现它。这是一个非常基本的操作。

相关问题