Python 查找循环元素的第一个索引
给定具有重复元素的numpy数组:Python 查找循环元素的第一个索引,python,arrays,numpy,indexing,Python,Arrays,Numpy,Indexing,给定具有重复元素的numpy数组: a = numpy.array([1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 1, 1]) 如何找到每个重复元素(1、2、3、1)的第一个索引?我希望它返回一个索引数组: >> index array([0, 4, 7, 12]) 注意:数组中的元素可以重复,因此它们不是唯一的。 编辑:是否有一种方法也适用于字符串数组 a = numpy.array(["a", "a", &
a = numpy.array([1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 1, 1])
如何找到每个重复元素(1、2、3、1)的第一个索引?我希望它返回一个索引数组:
>> index
array([0, 4, 7, 12])
注意:数组中的元素可以重复,因此它们不是唯一的。编辑:是否有一种方法也适用于字符串数组
a = numpy.array(["a", "a", "a", "a", "c", "c", "c", "b", "b", "b", "b", "b", "a", "a"])
您可以使用np.where获取np.diff并添加第0个元素:
np.concatenate(([0],np.where(np.diff(a)!=0)[0]+1))
np.searchsorted
如果数组按升序排列,则速度很快
输出:
array([ 0, 4, 7, 14])
array([ 7, 0, 5, 13, 3])
array([ 7, 0, 5, 13, 3])
如果数组未排序,则需要使用argsort前后排序:
a = np.array([1, 3, 3, 5, 5, 2, 2, 0, 0, 3, 3, 3, 1, 4])
i = a.argsort()
i[np.searchsorted(a[i], [0, 1, 2, 4, 5])]
输出:
array([ 0, 4, 7, 14])
array([ 7, 0, 5, 13, 3])
array([ 7, 0, 5, 13, 3])
这也适用于:
i[np.searchsorted(a, [0, 1, 2, 4, 5], sorter=i)]
输出:
array([ 0, 4, 7, 14])
array([ 7, 0, 5, 13, 3])
array([ 7, 0, 5, 13, 3])
是否有一种方法可以将其扩展到字符串数组?e、 g:a=numpy.数组([“a”、“a”、“a”、“c”、“c”、“b”、“b”、“a”、“a”])