从numpy到稀疏.coo\u矩阵作品。从数据帧到np数组再到稀疏.coo\u矩阵不起作用:索引

2024-04-27 04:29:33 发布

您现在位置:Python中文网/ 问答频道 /正文

情况1:从numpy数组到coo\u矩阵:

    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\u矩阵:

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:数组中的元素相同,但先是数据帧,然后是稀疏矩阵(这种情况是我需要正确运行的情况,因为最初我将数据放在数据帧中,而不是作为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\ U矩阵:

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

为什么我得到这个索引器?这两种情况之间的唯一区别是数据类型,但我不知道如何更改它,因此它适用于情况2。你知道吗


Tags: postruereturnnp情况矩阵arrayar