为了账号安全,请及时绑定邮箱和手机立即绑定

行索引超过了 scipy csr_matrix 的矩阵维度

行索引超过了 scipy csr_matrix 的矩阵维度

Go
qq_遁去的一_1 2022-06-14 09:40:56
我是 python 和 pandas 的新手,我有以下问题我有一个数据集df = pd.read_csv('/home/nikoscha/Documents/ThesisR/dataset.csv', names=['response_nn','event','user'])我正在尝试使用以下代码创建一个 csr_matrix# Create lists of all events, users adfnd responesevents = list(np.sort(df.event_id.unique()))users = list(np.sort(df.user_id.unique()))responses = list(df.responses)# Get the rows and columns for our new matrixrows = df.user_id.astype(float)cols = df.event_id.astype(float)# Contruct a sparse matrix for our users and items containing number of playsdata_sparse = sp.csr_matrix((responses, (rows, cols)), shape=(len(users), len(events)))上面的代码有效。但是当我得到一个训练数据集时mask = np.random.rand(len(df)) < 0.5df = df[mask]df = df.reset_index() df = df.drop(['index'], axis=1)或者只是删除特定的行df = df[df.responses != 2]并尝试构造稀疏矩阵我得到以下错误ValueError:行索引超出矩阵维度谁能解释我为什么?先感谢您
查看完整描述

1 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

正如 scipy 的文档中所解释的,当 csr_matrix 以这种形式初始化时:


csr_matrix((数据, (row_ind, col_ind)), [shape=(M, N)])


在 scipy.sparse.csr.py 中:


csr_matrix((data, (row_ind, col_ind)), [shape=(M, N)])  

        where `data`, `row_ind` and `col_ind` satisfy the  

        relationship `a[row_ind[k], col_ind[k]] = data[k]`.  

当 csr init 时,它会检查 row_ind.max() 和 M 之间的关系。


同样在 scipy.sparse.coo.py 中:


if self.row.max() >= self.shape[0]:

                raise ValueError('row index exceeds matrix dimensions')

            if self.col.max() >= self.shape[1]:

                raise ValueError('column index exceeds matrix dimensions')

            if self.row.min() < 0:

                raise ValueError('negative row index found')

            if self.col.min() < 0:

                raise ValueError('negative column index found')

所以 row_ind.max(), col.ind.max() 必须小于 M, N


以上都是因为您想使用 row_ind 和 col.ind 中的数据作为索引来构造稀疏矩阵。


IE:


a = np.random.random((8,2))

row = np.hstack((a[:,0],a[:,1]))

#row[0]=9

col = np.hstack([a[:,1],a[:,0]])

matrix = csr_matrix(([1]*row.shape[0], (row,col)),shape=(a.shape[0],a.shape[0]))

它适用于带有注释的 row[0]=9 。希望能帮助到你。


查看完整回答
反对 回复 2022-06-14
  • 1 回答
  • 0 关注
  • 1173 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信