Python 第一次出现大于numpy数组中给定值的值
我有一个2D数组,如:Python 第一次出现大于numpy数组中给定值的值,python,arrays,numpy,argmax,Python,Arrays,Numpy,Argmax,我有一个2D数组,如: r1= np.array([[1,2,3,4],[2,3,4,5],[3,4,5,6]]) 我需要为每一行找到第一个大于默认值的值。我用的是: default=2 ans= np.argmax(r1>default,1) 问题是,如果有一个大于默认值的值,它就会工作,但如果找不到这样的值,它就会返回零。所以它在两种情况下返回零- 1) 每行中的第一个值大于默认值 2) 每个中的值都不大于默认值 #simple case: In[31]: np.argmax(r1
r1= np.array([[1,2,3,4],[2,3,4,5],[3,4,5,6]])
我需要为每一行找到第一个大于默认值的值。我用的是:
default=2
ans= np.argmax(r1>default,1)
问题是,如果有一个大于默认值的值,它就会工作,但如果找不到这样的值,它就会返回零。所以它在两种情况下返回零-
1) 每行中的第一个值大于默认值
2) 每个中的值都不大于默认值
#simple case:
In[31]: np.argmax(r1>2,1)
Out[31]: array([2, 1, 0], dtype=int64)
#trouble case- both returning zeros
In[32]: np.argmax(r1>7,1)
Out[32]: array([0, 0, 0], dtype=int64)
In[33]: np.argmax(r1>0.5,1)
Out[33]: array([0, 0, 0], dtype=int64)
我目前正在使用此解决此问题:
In[37]: np.any(r1>7,1) + np.argmax(r1>7,1)-1
Out[37]: array([-1, -1, -1], dtype=int64)
In[38]: np.any(r1>0.5,1) + np.argmax(r1>0.5,1)-1
Out[38]: array([0, 0, 0], dtype=int64)
有没有其他的简化建议?表单的嵌套列表(2d数组)
对于每个嵌套列表中大于给定数字“d”的第一个值,可以使用
[[i for i in x if i>d][0] for x in l]
老实说,看起来已经相当简洁了。但我认为有一个替代方案可能有效:
ans = np.argmax(r1>default,1) - (np.amin(r1<=default,1))
ans=np.argmax(r1>默认值,1)-(np.amin(r1)必须与argmax()一起使用至少一个func)
,所以在我看来这很简单。谢谢,这对于我想要实际值的情况很有用。不要回答我想要这些值的索引的问题,也不要在找不到值的情况下出现错误。仍然有一个很好的骗局很久没有被记录。也可以对索引进行操作。[y for y in[[x.index(i)]对于x中的i,如果i>d]对于l中的x]如果len(y)>0]
ans = np.argmax(r1>default,1) - (np.amin(r1<=default,1))