这是因为lil_matrix.todense()
返回一个 numpy matrix
,它总是有ndim = 2
,而不是 numpy ndarray
,它会在切片中只选择一行/列时减小它的维度。矩阵/数组的维数在转换为列表格式时保留。
要查看数组中的 2d 行为,请将其切片为:
test_mat = np.ones((4,6))
test_list = test_mat[0:1,:].tolist()
或者,将其启动为:
test_mat = np.matrix(np.ones((4,6)))
test_list = test_mat[0:1,:].tolist()
您将看到列表的 2d 列表,就像您从lil_matrix
这是您在转换为列表之前所拥有的:
In [137]: ma = np.ones((4,6))
In [138]: mm = np.matrix(np.ones((4,6)))
In [139]: ms = lil_matrix(np.ones((4,6)))
In [141]: ma[0,:]
Out[141]: array([ 1., 1., 1., 1., 1., 1.])
In [142]: mm[0,:]
Out[142]: matrix([[ 1., 1., 1., 1., 1., 1.]])
In [143]: ms[0,:].todense()
Out[143]: matrix([[ 1., 1., 1., 1., 1., 1.]])
使用不减少维度的切片:
In [144]: ma[0:1,:]
Out[144]: array([[ 1., 1., 1., 1., 1., 1.]])
上面方括号的数量是关键。看看它们的形状:
In [145]: ma[0:1,:].shape
Out[145]: (1, 6)
In [146]: ma[0,:].shape
Out[146]: (6,)
In [147]: mm[0,:].shape
Out[147]: (1, 6)
In [148]: ms[0,:].shape
Out[148]: (1, 6)