scipy csr_matrix: понять indptr - PullRequest
       18

scipy csr_matrix: понять indptr

0 голосов
/ 12 сентября 2018

Время от времени я манипулирую csr_matrix, но я всегда забываю, как параметры indices и indptr работают вместе для создания разреженной матрицы.

Я ищупонятное и интуитивно понятное объяснение того, как indptr взаимодействует с параметрами data и indices при определении разреженной матрицы с использованием обозначения csr_matrix((data, indices, indptr), [shape=(M, N)]).

, которое я вижу из документации scipy что параметр data содержит все ненулевые данные, а параметр indices содержит столбцы, связанные с этими данными (в этом случае indices равен col в примере, приведенном в документации).Но как мы можем четко объяснить параметр indptr?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

Конечно, элементы внутри indptr расположены в порядке возрастания. Но как объяснить поведение indptr? Короче говоря, пока элемент внутри indptr не станет прежним или не увеличится, вы можете пропустить индекс строки разреженной матрицы.

Следующий пример иллюстрирует приведенную выше интерпретацию элементов indptr:

Пример 1) представьте эту матрицу:

array([[0, 1, 0],
       [8, 0, 0],
       [0, 0, 0],
       [0, 0, 0],
       [0, 0, 7]])


mat1 = csr_matrix(([1,8,7], [1,0,2], [0,1,2,2,2,3]), shape=(5,3))
mat1.indptr
# array([0, 1, 2, 2, 2, 3], dtype=int32)
mat1.todense()  # to get the corresponding sparse matrix

Пример 2) Массив в CSR_matrix (случай, когда разреженная матрица уже существует):

arr = np.array([[0, 0, 0],
                [8, 0, 0],
                [0, 5, 4],
                [0, 0, 0],
                [0, 0, 7]])


mat2 = csr_matrix(arr))
mat2.indptr
# array([0, 0, 1, 3, 3, 4], dtype=int32)
mat2.indices
# array([0, 1, 2, 2], dtype=int32)
mat.data
# array([8, 5, 4, 7], dtype=int32)
0 голосов
/ 12 сентября 2018

Возможно, это объяснение может помочь понять концепцию (по крайней мере, так я понял, как она работает под капотом).

Параметр indptr указывает на каждую строку в разреженной матрице:

  • какой столбец заполняется указанием на правильные элементы indices
  • какие данные заполняются указанием на правильные элементы data

Это делается по следующим причинам:

  1. Если в разреженной матрице есть M строк, параметр indptr имеет M + 1 элементов
  2. для строки i , [indptr[i]:indptr[i+1]] дает элементы из indices и data для заполнения разреженной матрицы для этой строки.Другими словами, [indptr[i]:indptr[i+1]] возвращает индексы элементов, взятых из indices и data, которые соответствуют строке i .

Значения, указанные в indptr обязательно увеличивается, поскольку он служит для запроса параметров data и indices для заполнения разреженной матрицы.

EDIT : добавлено следующее изображение в надежде, что это прояснит ситуацию.indices содержит информацию о столбцах, где хранятся ненулевые значения, а data содержит информацию о ненулевых фактических значениях.indptr отображает строки, связанные с каждым элементом в indices и data.

enter image description here

...