情况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。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐