В Numpy ix_ () используется для захвата строк и столбцов матрицы, но, похоже, она не работает с разреженными матрицами.Например, этот код работает, потому что он использует плотную матрицу:
>>> import numpy as np
>>> x = np.mat([[1,0,3],[0,4,5],[7,8,0]])
>>> print x
[[1 0 3]
[0 4 5]
[7 8 0]]
>>> print x[np.ix_([0,2],[0,2])]
[[1 3]
[7 0]]
Я использовал ix_ () для индексации элементов, соответствующих 0-й и 2-й строкам и столбцам, что дает 4 угла матрицы.
Проблема в том, что ix_ не работает с разреженными матрицами.Продолжая предыдущий код, я пробую следующее:
>>> import scipy.sparse as sparse
>>> xspar = sparse.csr_matrix(x)
>>> print xspar
(0, 0) 1
(0, 2) 3
(1, 1) 4
(1, 2) 5
(2, 0) 7
(2, 1) 8
>>> print xspar[np.ix_([0,2],[0,2])]
и получаю огромное сообщение об ошибке, говорящее, что есть это исключение:
File "C:\Python26\lib\site-packages\scipy\sparse\compressed.py", line 138, in check_format
raise ValueError('data, indices, and indptr should be rank 1')
ValueError: data, indices, and indptr should be rank 1
Я пробовал это с другой разреженной матрицейформаты, предоставляемые SciPy, но ни один из них, похоже, не работает с ix_ (), хотя не все они вызывают одно и то же исключение.
В приведенном мной примере использовалась матрица, которая была не очень большой или очень разреженной,но те, с которыми я имею дело, довольно редки и потенциально очень велики, поэтому не кажется разумным просто перечислять элементы один за другим.
Кто-нибудь знает (надеюсь, простой) способ сделать этот видиндексации с разреженными матрицами в SciPy или эта функция просто не встроена в эти разреженные матрицы?