import numpy as np
a = np.array([1,2,13,7,3,5])
index = a == 13
print a[index+1]
预期结果是7.如何获得?
答案 0 :(得分:1)
我提出的解决方案是OP问题的推广,因为OP数组只出现了数字13
,在这里我讨论了多次出现的可能性。
除了一个解决方案之外,我的所有解决方案都基于列表循环的概念(通过我用于帮助函数的名称rotate
更清楚)。
如果有用例(我认为有这样的用例)!如果不欢迎循环的假设,那么使用我的第三段代码,或者更好的是@cel的答案,只要你在访问数组之前测试索引或在try
{{1 }。clause。
except
另一种可能性
>>> import numpy as np
>>> a = np.array([1,2,13,7,3,5])
>>> i = a == 13
>>> print a[np.concatenate(([False],i[:-1]))]
[7]
>>>
另一个(脆弱,它可以超出>>> print a[np.concatenate((i[-1:],i[:-1]))]
[7]
>>>
的长度索引,不要使用这个裸格式的最后一个,请参阅前言)
a
你现在有一个数组的可能性......
>>> print a[np.arange(len(a))[i]+1]
[7]
>>>
答案 1 :(得分:1)
最简单的方法是使用nonzero
。它返回一个数组元组,因此你必须做一些额外的索引:
In [1]: a = np.array([1,2,13,7,3,5])
In [2]: i = a == 13
In [3]: i
Out[3]: array([False, False, True, False, False, False], dtype=bool)
In [4]: i.nonzero()
Out[4]: (array([2]),)
In [5]: i.nonzero()[0]
Out[5]: array([2])
In [6]: i.nonzero()[0][0]
Out[6]: 2
In [7]: a[i.nonzero()[0][0] + 1]
Out[7]: 7
答案 2 :(得分:1)
我会做以下事情:
import numpy as np
a = np.array([1,2,13,7,3,5])
indices, = np.where(a[:-1] == 13)
print a[indices[0] + 1]
在python3中你也可以这样做:
import numpy as np
a = np.array([1,2,13,7,3,5])
indices, = np.where(a[:-1] == 13)
first_index, *_ = indices
print(a[first_index + 1])
在我看来哪个更具可读性。不幸的是,python2版本不支持扩展的元组解包。
两个版本都要求问题定义明确,并且列表中确实存在13
并且它具有前一个版本。
如果这不适用于您的问题,则可以检查indices
的长度,如果长度为0
,您可能希望以适当的错误终止。
答案 3 :(得分:0)
我认为这是最直接的方式:
import numpy as np
a = np.array([1,2,13,7,3,5])
print a[np.flatnonzero(a == 13) + 1]