2012-01-25 116 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中實現它。這是一個非常基本的操作。

相關問題