【问题标题】:Get indices of strings in an array获取数组中字符串的索引
【发布时间】:2017-07-28 02:19:10
【问题描述】:

我在 numpy 中有一个如下所示的数组:

myarray = ['a', 'b', 'c', 'd', 'e', 'f']

我想返回一个'b', 'c', 'd' 的索引数组,如下所示:

myind = [1,2,3]

稍后我需要这个索引数组来循环使用它。我正在使用 Python 2.7。谢谢各位

【问题讨论】:

    标签: arrays string python-2.7 numpy


    【解决方案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]])
    

    【讨论】:

    • 对于这种特殊情况,我没有重复。但在其他情况下,我确实有重复。我很欣赏你的解决方案。谢谢。
    【解决方案2】:

    你可以使用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])
    

    【讨论】:

    • myarray 未排序,但字符串位置不应更改。
    • @Bob 考虑接受最适合您的解决方案之一。在此处阅读有关接受解决方案的更多信息 - meta.stackexchange.com/questions/5234/…
    猜你喜欢
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    相关资源
    最近更新 更多