Как создать 2D-массив в python

user9287749 спросил: 28 марта 2018 в 04:41 в: arrays

Я пытаюсь создать функцию "words_in_texts", чтобы получить результат, подобный этому

words_in_texts(['hello', 'bye', 'world'], 
               pd.Series(['hello', 'hello world hello'])array([[1, 0, 0],
   [1, 0, 1]])   

Я считаю, что аргументом для этой функции должен быть список со всеми слова и ряд.

def words_in_texts(words, texts):
'''
Args:
    words (list-like): words to find
    texts (Series): strings to search inReturns:
    NumPy array of 0s and 1s with shape (n, p) where n is the
    number of texts and p is the number of words.
'''
indicator_array = texts.str.contains(words)return indicator_array

Я смущен тем, как создать результат массива 2d, может ли кто-нибудь помочь мне в этом? Заранее благодарю вас!


1 ответ

Есть решение
MaxU ответил: 28 марта 2018 в 04:47

Используйте sklearn.feature_extraction.text.CountVectorizer:

In [52]: from sklearn.feature_extraction.text import CountVectorizerIn [53]: vect = CountVectorizer(vocabulary=['hello', 'bye', 'world'], binary=True)In [54]: X = vect.fit_transform(pd.Series(['hello', 'hello world hello']))

результат в качестве разреженной матрицы:

In [55]: X
Out[55]:
<2x3 sparse matrix of type '<class 'numpy.int64'>'
        with 3 stored elements in Compressed Sparse Row format>

вы можете преобразовать его в плотную матрицу:

In [56]: X.A
Out[56]:
array([[1, 0, 0],
       [1, 0, 1]], dtype=int64)

функции (имена столбцов):

In [57]: vect.get_feature_names()
Out[57]: ['hello', 'bye', 'world']
Ami Tavory ответил: 28 марта 2018 в 04:47
Ха-ха, моя ссылка на ссылку столкнулась с вашей там. Хороший ответ.
MaxU ответил: 28 марта 2018 в 04:57
@ user9287749, рад, что смог помочь :) Пожалуйста, рассмотрите возможность принять / отменить ответ, если считаете, что он ответил на ваш вопрос