如何在python中获取数组值不同位置的索引
我有一个数组,看起来像(简化版): [14 14 14 13 13 13 2 2 2 2 2 2] 我需要做的是确定它在哪里变化的索引。比如指数5是13等等。我不知道怎么做。欢迎任何形式的帮助!!:)如何在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
我已经用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显示排序后的值,因此它不能解决我想要实现的问题。感谢所有帮助过我的人!我终于解决了我的问题。