Чтобы получить разреженную матрицу, вы можете использовать scipy.sparse.csr_matrix
, как описано здесь: Преобразовать Pandas фрейм данных в разреженный Numpy Матрица напрямую
import pandas as pd
import scipy
test_df = pd.DataFrame(np.arange(10), columns = ['category'])
scipy.sparse.csr_matrix(pd.get_dummies(test_df).values
)
Вывод
<10x1 sparse matrix of type '<class 'numpy.longlong'>'
with 9 stored elements in Compressed Sparse Row format>
Параметр sparse = True
имеет отношение к типам объектов (np.array
vs SparseArray
), используемых внутри для создания вывода (https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.get_dummies.html):
sparse : должны ли столбцы с фиктивной кодировкой поддерживаться SparseArray (True) или обычным массивом NumPy (False).
Если вы установите sparse = True
это ускоряет ваш код в несколько раз:
- Получение манекенов с помощью
sparse = True
%timeit pd.get_dummies(test_df.category, sparse=True)
Вывод
2.21 ms ± 117 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
- Получение манекенов с
sparse = False
%timeit pd.get_dummies(test_df.category, sparse=False)
Выход
454 µs ± 18.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)