これは、 numpyとは対照的に、 numpyを常に持つlil_matrix.todense()
numpy を返すためです。 numpyは、スライスで 1 つの行/列のみが選択されている場合にその次元を減らします。行列/配列の次元は、リストのリスト形式への変換で保持されます。matrix
ndim = 2
ndarray
配列内の 2 次元の動作を確認するには、次のようにスライスします。
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()
そして、あなたが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)