2013-07-29 3 views
1

Учитывая scipy.sparse.crs_matrix, я хотел бы, чтобы извлечь подматрицы, что в плотной алгебре Numpy была бы быть выражена какшахматная подматрицы для SciPy :: crs_matrix

A[0::2, 0::2] 

т.е. A_{new}(i,j) = A(2*i,2*j) («шахматная доска черных квадратов матрицы»).

+0

возможно дубликат [нарезка разреженную матрицу (SciPy)] (http://stackoverflow.com/questions/7609108/ нарезка разреженных SciPy-матрица) –

ответ

1

Если вы сначала преобразовать матрицу в COO форматировать его кусок пирога:

def sps_black_squares(a): 
    a = a.tocoo() 
    idx = (a.row % 2 == 0) & (a.col % 2 == 0) 
    new_shape = tuple((j-1) // 2 + 1 for j in a.shape) 
    return sps.csr_matrix((a.data[idx], (a.row[idx]//2, a.col[idx]//2)), 
          shape=new_shape) 

%timeit sps_black_squares(a) 
1000 loops, best of 3: 315 us per loop 

%timeit sps.csr_matrix(a.toarray()[::2, ::2]) 
100 loops, best of 3: 6.55 ms per loop 

np.allclose(sps_black_squares(a).toarray(), a.toarray()[::2, ::2]) 
Out[119]: True