我有清潔一組禁用詞的文本功能:numpy的矢量化是做什麼的?
def clean_text(raw_text, stopwords_set):
# removing everything which is not a letter
letters_only = re.sub("[^a-zA-Z]", " ", raw_text)
# lower case + split --> list of words
words = letters_only.lower().split()
# now remove the stop words
meaningful_words = [w for w in words if not w in stopwords_set]
# join the remaining words together to get the cleaned tweet
return " ".join(meaningful_words)
160萬嘰嘰喳喳的鳴叫在pandas
數據幀的數據集。如果我只是apply
此功能這樣的數據框:
dataframe['clean_text'] = dataframe.apply(
lambda text: clean_text(text, set(stopwords.words('english'))),
axis = 1)
計算需要2分鐘才能完成(約)。然而,當我使用np.vectorize
這樣的:
dataframe['clean_text'] = np.vectorize(clean_text)(
dataframe['text'], set(stopwords.words('english')))
計算10秒(大約)之後完成。
這本身並不令人驚訝,如果不是兩種方法都只在我的機器上使用一個內核。我假設,通過向量化,它會自動使用多個內核來更快地完成,並以這種方式獲得更多速度,但它似乎做了一些不同的事情。
numpy
的hasctorize是什麼樣的「魔法」呢?
同樣,您是否閱讀過有關'np.vectorize'的文檔?它聲明 - ''vectorize函數主要是爲了方便,而不是爲了性能,實現本質上是一個for循環。「 – Divakar
@Divakar那麼如何解釋加速呢?即使有了這些知識,我也看不出如何解釋加速,所以這對我還沒有幫助。請保持建設性,謝謝。 – Zelphir
你可以把它與一個for-loop版本對比嗎? – Divakar