Связанная notebook
создает «пустую» разреженную матрицу и устанавливает выбранные элементы из данных, которые она считывает из csv
.
Простой пример этого:
In [565]: from scipy import sparse
In [566]: M = sparse.lil_matrix((10,5), dtype=float)
In [567]: M
Out[567]:
<10x5 sparse matrix of type '<class 'numpy.float64'>'
with 0 stored elements in LInked List format>
Обратите внимание, что я использую (10,5)
, чтобы указать форму матрицы.Причина!Вот почему я подчеркнул, читая docs
.В ссылке соответствующая строка:
X = lil_matrix((lines, columns)).astype('float32')
Теперь я могу установить пару элементов, как и плотный массив:
In [568]: M[1,2] = 12.3
In [569]: M[3,1] = 1.1
In [570]: M
Out[570]:
<10x5 sparse matrix of type '<class 'numpy.float64'>'
with 2 stored elements in LInked List format>
Я могу использовать toarray
для отображенияматрица в виде плотного массива (не пытайтесь сделать это с большими размерами).
In [571]: M.toarray()
Out[571]:
array([[ 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 12.3, 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. ],
[ 0. , 1.1, 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. ]])
Если я опускаю (), она создает матрицу (1,1) только с одним элементом,первый номер.
In [572]: sparse.lil_matrix(10,5)
Out[572]:
<1x1 sparse matrix of type '<class 'numpy.int64'>'
with 1 stored elements in LInked List format>
In [573]: _.A
Out[573]: array([[10]], dtype=int64)
Посмотрите еще раз на свой код.Вы устанавливаете значение X
дважды, как только это будет кадр данных.Второй раз это плохая lil
инициализация.Второй раз не использует первый X
.
X=data.drop([data.columns[0]],axis='columns')
...
X=lil_matrix(100000,15).astype('float32')