Конвертировать 1-D массив в разреженную матрицу - PullRequest
0 голосов
/ 28 июня 2019

Я работаю над проектом рекомендаций, где у меня есть данные, подобные этим:

ID Movie
1   A
2   B
3   C
4   D
..
..

Я хочу создать этот кадр данных в разреженной матрице, подобной этой:

     1  2  3  4 ....n

1    1  0  0  0     0
2    0  1  0  0     0
3    0  0  1  0     0
4    0  0  0  1     0
.
.
n    0  0  0  0     1

В основном обаСтроки и столбцы содержат идентификатор перемещения, и значение равно 1, если элемент строки и столбца имеет одинаковое значение.Я хочу представить это в разреженном формате

 <sparse matrix of type '<class 'numpy.int32'>'
    with 58770 stored elements in Compressed Sparse Row format>

Я попытался сделать следующее:

 - np.diag(items)
 - csr_matrix(items.values)

Но я не могу понять это.Кто-нибудь может мне помочь?

Ответы [ 2 ]

1 голос
/ 28 июня 2019

Матрица с единицами по диагонали и нулями везде называется «единичной матрицей».Вы можете создать его в Python с помощью scipy.sparse.identity(n).Документация здесь .

1 голос
/ 28 июня 2019

Вы можете использовать scipy.sparse.spdiags

num_data=len(df)
sp=sparse.spdiags(np.ones(num_data), 0, num_data,num_data)

OUTPUT

  (0, 0)    1.0
  (1, 1)    1.0
  (2, 2)    1.0
  (3, 3)    1.0

Если ID фильма не соответствует:

sparse.coo_matrix((np.ones(num_data),(df['ID'],df['ID'])))

если ID из двух разных фреймов данных:

match=list(set(df['ID']).intersection(set(df2['ID'])))
sparse.coo_matrix((np.ones(num_data),(match,match)))
...