У меня есть мешок из-слов представления корпуса, сохраненного в D по W разреженной матрицы word_freqs
. Каждая строка является документом, и каждый столбец является словом. Данный элемент word_freqs[d,w]
представляет число вхождений слова w в документ d.Logical не на SciPy разреженной матрицы
Я пытаюсь получить другую D по W матрица not_word_occs
где для каждого элемента word_freqs
:
- Если
word_freqs[d,w]
равен нулю,not_word_occs[d,w]
должен быть один. - В противном случае
not_word_occs[d,w]
должен быть равен нулю.
В конце концов, эту матрицу нужно будет умножить на другие матрицы, которые могут быть плотными или разреженными.
Я пробовал несколько методов, в том числе: (., Которая составляет около 18,000x16,000)
not_word_occs = (word_freqs == 0).astype(int)
Эти слова для игрушечные примеры, но результаты в MemoryError
для моих фактических данных ,
Я также попытался np.logical_not()
:
word_occs = sklearn.preprocessing.binarize(word_freqs)
not_word_occs = np.logical_not(word_freqs).astype(int)
Это казалось многообещающим, но np.logical_not()
не работает на разреженных матриц, что дает следующую ошибку:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all().
Любые идеи или инструктивный будет оценена.
(.. Кстати, word_freqs
порождается sklearn-х preprocessing.CountVectorizer()
Если есть решение, которое включает в себя преобразование это другой вид матрицы, я, конечно, открыты для этого)
Если 'word_freqs' является SciPy разреженной матрицы, она должна иметь представление печати, который показывает форму, число ненулевых значений, dtype и разреженного формата. – hpaulj
'<18144x14511 разреженная матрица типа '' с 619900 хранимыми элементами в формате сжатого разреженного диапазона>' –
err1100
Так что это .002 разреженный. Тогда «нет» будет 99,8%. – hpaulj