我知道Python列表有一种方法可以返回第一个索引:
>>> l = [1, 2, 3]
>>> l.index(2)
1
Run Code Online (Sandbox Code Playgroud)
NumPy阵列有类似的东西吗?
如何找到Numpy数组中第一次出现数字的索引?速度对我很重要.我对以下答案不感兴趣,因为他们扫描整个数组并且在第一次出现时不停止:
itemindex = numpy.where(array==item)[0][0]
nonzero(array == item)[0][0]
Run Code Online (Sandbox Code Playgroud)
注1:该问题的答案似乎没有任何问题是否有Numpy函数返回数组中某些内容的第一个索引?
注2:使用C编译方法比Python循环更受欢迎.
我有一个df带有很长的随机正整数列的数据帧:
df = pd.DataFrame({'n': np.random.randint(1, 10, size = 10000)})
Run Code Online (Sandbox Code Playgroud)
我想确定列中第一个偶数的索引.一种方法是:
df[df.n % 2 == 0].iloc[0]
Run Code Online (Sandbox Code Playgroud)
但这涉及很多操作(生成指数f.n % 2 == 0,评估df这些指数,最后采取第一项)并且非常缓慢.像这样的循环要快得多:
for j in range(len(df)):
if df.n.iloc[j] % 2 == 0:
break
Run Code Online (Sandbox Code Playgroud)
也因为第一个结果可能在前几行.是否有任何pandas方法以相似的性能执行此操作?谢谢.
注意:这个条件(是一个偶数)只是一个例子. 我正在寻找适用于价值观的任何条件的解决方案,即快速单线替代:
df[ conditions on df.n ].iloc[0]
Run Code Online (Sandbox Code Playgroud) 什么原因NaN被认为比-np.inf任何涉及np.min或比较的比较少np.argmin?
import numpy as np
In [73]: m = np.array([np.nan, 1., 0., -np.inf])
In [74]: n = np.array([-np.inf, 1., 0., np.nan])
# Huh??
In [75]: np.min(m)
Out[75]: nan
In [76]: np.min(n)
Out[76]: nan
# Same for np.argmin
In [77]: np.argmin(m)
Out[77]: 0
In [78]: np.argmin(n)
Out[78]: 3
# Its all false!
In [79]: np.nan < -np.inf
Out[79]: False
In [80]: np.nan > -np.inf
Out[80]: False
# OK, that seems to fix it, …Run Code Online (Sandbox Code Playgroud) 我不明白为什么还没有进行如此基本的优化:
In [1]: %timeit np.ones(10**6).any()
100 loops, best of 3: 7.32 ms per loop
In [2]: %timeit np.ones(10**7).any()
10 loops, best of 3: 59.7 ms per loop
Run Code Online (Sandbox Code Playgroud)
即使结论是第一项的证据,也扫描整个阵列.