获取值大于前一个元素的 numpy 1d 数组的索引
Get indices of numpy 1d array where value is greater than previous element
假设我生成了一个 1d numpy 数组:
r=np.random.randint(0,10,(10,))
给予,例如:
array([1, 5, 6, 7, 7, 8, 8, 0, 2, 7])
我可以找到元素大于前一个(左边的元素)的索引,如下所示:
for x in range(r.shape[0]):
if r[x]>r[x-1]:
p[x]=1
else:
p[x]=0
np.where(p==1)[0]
给予:
array([1, 2, 3, 5, 8, 9])
有更好的方法吗?
您可以使用 numpy.diff
with numpy.where
:
>>> arr = np.array([1, 5, 6, 7, 7, 8, 8, 0, 2, 7])
>>> np.where(np.diff(arr) > 0)[0] + 1
array([1, 2, 3, 5, 8, 9])
另一种方法是使用数组切片:
>>> arr = np.array([1, 5, 6, 7, 7, 8, 8, 0, 2, 7])
>>> np.where(np.r_[False, arr[1:] > arr[:-1]])[0]
array([1, 2, 3, 5, 8, 9])
你把数组右移一位,然后和它自己比较。结果的长度比原始数组短。由于第一个值无法与它左边的值进行比较,因此您将第一个结果设置为 false。
假设我生成了一个 1d numpy 数组:
r=np.random.randint(0,10,(10,))
给予,例如:
array([1, 5, 6, 7, 7, 8, 8, 0, 2, 7])
我可以找到元素大于前一个(左边的元素)的索引,如下所示:
for x in range(r.shape[0]):
if r[x]>r[x-1]:
p[x]=1
else:
p[x]=0
np.where(p==1)[0]
给予:
array([1, 2, 3, 5, 8, 9])
有更好的方法吗?
您可以使用 numpy.diff
with numpy.where
:
>>> arr = np.array([1, 5, 6, 7, 7, 8, 8, 0, 2, 7])
>>> np.where(np.diff(arr) > 0)[0] + 1
array([1, 2, 3, 5, 8, 9])
另一种方法是使用数组切片:
>>> arr = np.array([1, 5, 6, 7, 7, 8, 8, 0, 2, 7])
>>> np.where(np.r_[False, arr[1:] > arr[:-1]])[0]
array([1, 2, 3, 5, 8, 9])
你把数组右移一位,然后和它自己比较。结果的长度比原始数组短。由于第一个值无法与它左边的值进行比较,因此您将第一个结果设置为 false。