2012-03-08 3 views
2

У меня возникли проблемы изменения размера матрицы - функция set_shape кажется, не имеет никакого эффекта:питона (SciPy): Изменение размера разреженной матрицы

>>> M 
<14x3562 sparse matrix of type '<type 'numpy.float32'>' 
    with 6136 stored elements in LInked List format> 
>>> new_shape = (15,3562) 
>>> M.set_shape(new_shape) 
>>> M 
<14x3562 sparse matrix of type '<type 'numpy.float32'>' 
    with 6136 stored elements in LInked List format> 

Кто-нибудь еще встретить это?

Я также попытался сделать это вручную, т.е.

>>> M._shape = new_shape 
>>> M.data = np.concatenate(M.data, np.empty((0,0), dtype=np.float32)) 

но бросает ошибку:

*** TypeError: only length-1 arrays can be converted to Python scalars 

или

>>> M.data = np.concatenate(M.data, []) 
*** TypeError: an integer is required 

Для информации:

  • Python 2.6.5 (R265: 79063, 16 апреля 2010, 13:57:41)
  • SciPy 0.11.0.dev-03f9e4a

ответ

5

Если вы просто хотите добавить строку нулей на конец:

>>> M = sp.lil_matrix((14, 3562)) 
>>> sp.vstack([M, sp.lil_matrix((1, 3562))]) 
<15x3562 sparse matrix of type '<type 'numpy.float64'>' 
     with 0 stored elements in COOrdinate format> 
+0

Жутко, что дает мне ошибку: 'строка = sparse.lil_matrix ((1,3562))' 'последующим sparse.vstack (М, строка)' 'дает *** NotImplementedError: добавление скаляр в CSC или CSR-матрицу не поддерживается – tdc

+0

, и перед тем, как вы спросите M, определенно матрица lil! – tdc

+3

@tdc: это 'sparse.vstack ([M, row])'. –

Смежные вопросы