我在numpy的有一個數組,看起來像這樣:獲取字符串指數在一個數組
myarray = ['a', 'b', 'c', 'd', 'e', 'f']
我想回索引數組爲'b', 'c', 'd'
,看起來像這樣:
myind = [1,2,3]
我需要這個索引數組以後在循環中使用它。我正在使用Python 2.7。感謝鄉親
我在numpy的有一個數組,看起來像這樣:獲取字符串指數在一個數組
myarray = ['a', 'b', 'c', 'd', 'e', 'f']
我想回索引數組爲'b', 'c', 'd'
,看起來像這樣:
myind = [1,2,3]
我需要這個索引數組以後在循環中使用它。我正在使用Python 2.7。感謝鄉親
您可以使用np.searchsorted
-
In [61]: myarray = np.array(['a', 'b', 'c', 'd', 'e', 'f'])
In [62]: search = np.array(['b', 'c', 'd'])
In [63]: np.searchsorted(myarray, search)
Out[63]: array([1, 2, 3])
如果myarray
不按字母順序排序,我們需要使用額外的參數sorter
有了它,像這樣 -
In [64]: myarray = np.array(['a', 'd', 'b', 'e', 'c', 'f'])
In [65]: search = np.array(['b', 'c', 'd'])
In [67]: sidx = np.argsort(myarray)
In [69]: sidx[np.searchsorted(myarray, search, sorter=sidx)]
Out[69]: array([2, 4, 1])
如果陣列不不包含任何重複,然後np.searchsorted應該做的伎倆。如果你的數組包含重複,那麼你必須使用np.argwhere 例子:
input_array = np.array(['a','b','c','d','e','f','a'])
search = np.array(['a','b','c'])
np.searchsorted(input_array, search)
output >> array([0, 1, 2])
np.argwhere(input_array == 'a')
output >> array([[0],[6]])
對於一個更通用的解決方案,你可以做
np.concatenate((np.argwhere(input_array == 'a') ,
np.argwhere(input_array == 'b'),
np.argwhere(input_array == 'c')) )
output >> array([[0],[6],[1],[2]])
對於這種特殊情況,我沒有重複。但在其他情況下,我確實有重複。我感謝你的解決方案。謝謝。 – Bob
myarray中不排序,但琴絃的位置不應該改變。 – Bob
@Bob那麼,基於'sorter'的應該工作? – Divakar
@Bob此解決方案適合您嗎? – Divakar