Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查找循环元素的第一个索引_Python_Arrays_Numpy_Indexing - Fatal编程技术网

Python 查找循环元素的第一个索引

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", &

给定具有重复元素的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", "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”])