2012-01-25 2 views
0

浮動小数点型の項目を持つscipy.sparse.arrays nのリストを考えてみましょう。私は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] 

につながる神託の方法で可能このですか?

答えて

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

は、ここでは、2つの疎行列のための答えです:ちょうどこれを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でこれを実装します。これはかなり基本的な操作です。

関連する問題