Python允許一個簡單的檢查,如果一個字符串包含在另一個字符串:如何使用「in」運算符比較兩個numpy字符串數組以獲得使用數組廣播的布爾數組?
'ab' in 'abcd'
計算結果爲True
。
現在來numpy
字符串數組,你可以這樣做:
import numpy as np
A0 = np.array(['z', 'u', 'w'],dtype=object)
A0[:,None] != A0
在布爾陣列得到的:
array([[False, True, True],
[ True, False, True],
[ True, True, False]], dtype=bool)
讓我們現在就另一個數組:
A1 = np.array(['u_w', 'u_z', 'w_z'],dtype=object)
我想檢查一個字符串A0
不包含在中的一個字符串中,基本上是創造獨特的組合,但以下我怎麼寫了指數不產生boolean值陣列,只有一個布爾值,不管:
A0[:,None] not in A1
我使用numpy.in1d
和np.ndarray.__contains__
也嘗試過,但這些方法不似乎也可以做到這一點。
性能是一個問題,所以我想充分利用numpy's
優化。
我該如何做到這一點?
編輯:
,我發現這是可以做到這樣的:
fv = np.vectorize(lambda x,y: x not in y)
fv(A0[:,None],A1)
但作爲numpy
文檔狀態:
矢量化功能主要是爲了方便而提供,而不是性能。實現本質上是一個for循環。
所以這和循環數組是一樣的,如果沒有顯式或隱式的for循環就可以解決這個問題。
https://docs.scipy.org/doc/numpy/reference/generated/numpy.core.defchararray。 find.html#numpy.core.defchararray.find有一個函數庫,它將字符串方法應用於數組元素。 – hpaulj