Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/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 - Fatal编程技术网

如何在python中获取数组值不同位置的索引

如何在python中获取数组值不同位置的索引,python,arrays,numpy,Python,Arrays,Numpy,我有一个数组,看起来像(简化版): [14 14 14 13 13 13 2 2 2 2 2 2] 我需要做的是确定它在哪里变化的索引。比如指数5是13等等。我不知道怎么做。欢迎任何形式的帮助!!:) 我已经用np.unique尝试过了,但是这种方法的输出会对数字进行升序排序,因此我会丢失数字实际变化的位置。这对您有用吗 arr=[14,14,14,14,14,13,13,13,13,13,2,2,2,2,2,2,2,2,2] x=arr[0] for j in arr: if j!=x

我有一个数组,看起来像(简化版):

[14 14 14 13 13 13 2 2 2 2 2 2]

我需要做的是确定它在哪里变化的索引。比如指数5是13等等。我不知道怎么做。欢迎任何形式的帮助!!:)


我已经用np.unique尝试过了,但是这种方法的输出会对数字进行升序排序,因此我会丢失数字实际变化的位置。

这对您有用吗

arr=[14,14,14,14,14,13,13,13,13,13,2,2,2,2,2,2,2,2,2]
x=arr[0]
for j in arr:
    if j!=x:
        print(x,"changed to",j,"at position: ",arr.index(j))
        x=j
    

查看此代码:

arr = [14,14,14,14,14,13,13,13,13,13,2,2,2,2,2,2,2,2,2]
k = arr[0]
for i, j in enumerate(arr):
    if k != j:
        print(i) 
    k = arr[i]
5
10
输出:

arr = [14,14,14,14,14,13,13,13,13,13,2,2,2,2,2,2,2,2,2]
k = arr[0]
for i, j in enumerate(arr):
    if k != j:
        print(i) 
    k = arr[i]
5
10

使用循环非常简单

all_indexes = []
lisst = [14,14, 14, 14, 14, 13, 13, 13, 13, 13, 2, 2 ,2, 2, 2, 2, 2, 2, 2]
for i in range(len(lisst)-1):
    if lisst[i] != lisst[i+1]:
        all_indexes.append(i+1)
        
        
print(all_indexes)

使用列表理解的Python方式:

arr=[15,14,14,14,14,14,13,13,13,13,13,2,2,2,2,2,2,2,2,2,3]                                   

[i+1 for i in range(len(arr)-1) if arr[i] != arr[i+1]]                                        
# >>> [1, 6, 11, 20]

您可以使用
a[1:]将数组中的每个项目与下一个项目进行比较=a[:-1]
(对于某些1d数组
a
)。然后可以使用
np.where
将布尔数组转换为索引。由于切片的原因,您需要在此基础上添加一个

# added a 4 to the end of the array to have an extra place where the number changes
a=np.array([14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 2, 2, 2, 2, 2, 2, 2, 2, 2,4])
changes = np.where(a[1:]!=a[:-1])[0]+1
print('change indices:',changes)
print('before each change:',a[changes-1])
print('after each change:',a[changes])
这将产生:

change indices: [ 5 10 19]
before each change: [14 13  2]
after each change: [13  2  4]

这是查找唯一编号索引更改的最快方法

import numpy as np

arr = np.array([14, 14, 14, 13, 20, 20, 20, 2, 2, 2])

np.unique(arr, return_index=True)
输出
您不需要编写
else:pass
感谢您的回答,但这对我来说不起作用,因为我在arr.index()中遇到了一个错误,它说“numpy.ndarray”对象没有属性“index”。我的数组是使用.mat文件中的dicts创建的,经过整形、连接和拆分,因此可能存在一些问题。但是谢谢!!没问题@BeaGAMHello,非常感谢!!这成功了!!如果我的回答有效,你可以接受。非常感谢!!这成功了!!这和另一个帖子很相似,都很有效。谢谢np.unique显示排序后的值,因此它不能解决我想要实现的问题。感谢所有帮助过我的人!我终于解决了我的问题。