【发布时间】: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
我在 numpy 中有一个如下所示的数组:
myarray = ['a', 'b', 'c', 'd', 'e', 'f']
我想返回一个'b', 'c', 'd' 的索引数组,如下所示:
myind = [1,2,3]
稍后我需要这个索引数组来循环使用它。我正在使用 Python 2.7。谢谢各位
【问题讨论】:
标签: arrays string python-2.7 numpy
如果您的数组不包含任何重复项,那么 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]])
【讨论】:
你可以使用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])
【讨论】: