От numpy до sparse.coo_matrix работает. От панд DataFrame к массиву np к sparse.coo_matrix не работает: IndexError - PullRequest
0 голосов
/ 30 августа 2018

Случай 1: От массива numpy до coo_matrix:

    ar = np.array([['user1', 'product1'], ['user2', 'product2'], ['user3', 'product3'], ['user1', 'product4'],['user4','product5'],['user4','product1']])
    ar

> array([['user1', 'product1'],
>        ['user2', 'product2'],
>        ['user3', 'product3'],
>        ['user1', 'product4'],
>        ['user4', 'product5'],
>        ['user4', 'product1']], dtype='|S8')

затем создайте coo_matrix:

rows, r_pos = np.unique(ar[:,0], return_inverse=True)
cols, c_pos = np.unique(ar[:,1], return_inverse=True)
s = sparse.coo_matrix((np.ones(r_pos.shape,int), (r_pos, c_pos)))
print s

Дает:

  (0, 0)    1
  (1, 1)    1
  (2, 2)    1
  (0, 3)    1
  (3, 4)    1
  (3, 0)    1

Случай 2: Те же элементы массива, но для DataFrame, а затем для разреженной матрицы (этот случай мне нужен для правильной работы, потому что изначально у меня есть данные в DataFrame, а не как массив numpy).

df1 = pd.DataFrame(ar, columns = ['user_id','product_id'])
ar1 = np.array(df1.to_records(index=False))
ar1

Дает:

array([('user1', 'product1'), ('user2', 'product2'),
       ('user3', 'product3'), ('user1', 'product4'),
       ('user4', 'product5'), ('user4', 'product1')],
      dtype=(numpy.record, [(u'user_id', 'O'), (u'product_id', 'O')]))

Создать coo_matrix:

rows, r_pos = np.unique(ar1[:,0], return_inverse=True)
cols, c_pos = np.unique(ar1[:,1], return_inverse=True)
s = sparse.coo_matrix((np.ones(r_pos.shape,int), (r_pos, c_pos)))
print s

Выход:

IndexErrorTraceback (most recent call last)
<ipython-input-211-75a151d3e431> in <module>()
----> 1 rows, r_pos = np.unique(ar1[:,0], return_inverse=True)
      2 cols, c_pos = np.unique(ar1[:,1], return_inverse=True)
      3 s = sparse.coo_matrix((np.ones(r_pos.shape,int), (r_pos, c_pos)))
      4 print s

IndexError: too many indices for array

Почему я получаю эту IndexError? Единственное различие между этими двумя случаями заключается в dtype , но я не понял, как его изменить, чтобы оно работало для case 2 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...