Numpy等效于list.index - python

在多次调用的低级函数中,我需要执行与python的list.index等效的操作,但要使用numpy数组。该函数在找到第一个值时需要返回,否则返回ValueError。就像是:

>>> a = np.array([1, 2, 3])
>>> np_index(a, 1)
0
>>> np_index(a, 10)
Traceback (most recent call last):    
  File "<stdin>", line 1, in <module>
ValueError: 10 not in array

如果可能,我想避免Python循环。 np.where不是一个选项,因为它总是遍历整个数组。一旦找到第一个索引,我需要停止的东西。

编辑:与该问题有关的一些更具体的信息。

  • 大约90%的时间中,我要搜索的索引在数组的前1/4至1/2中。因此,这里可能有2-4倍加速的风险。其余10%的时间该值根本不在数组中。
  • 我已经描述了事情,对np.where的调用是瓶颈,至少占总运行时间的50%。
  • 引发ValueError并不是必须的;它只需要返回一些明显表明该值不在数组中的值即可。
  • 如建议的那样,我可能会在Cython中编写解决方案。

    参考方案

    请参阅我对OP的警告的评论,但总的来说,我会执行以下操作:

    import numpy as np
    a = np.array([1, 2, 3])
    np.min(np.nonzero(a == 2)[0])
    

    如果您要查找的值不在数组中,则由于以下原因,您将获得ValueError:

    ValueError: zero-size array to ufunc.reduce without identity
    

    因为您正在尝试获取空数组的最小值。

    我将分析此代码,看看它是否是一个实际的瓶颈,因为通常当numpy使用内置函数而不是显式python循环搜索整个数组时,它相对较快。在发现第一个值时坚持停止搜索可能在功能上不相关。

    Python:无符号32位按位算术 - python

    试图回答另一篇有关其解决方案涉及IP地址和网络掩码的文章时,我陷入了普通的按位算法。在Python中,是否存在一种标准的方式来进行按位AND,OR,XOR,NOT运算,假设输入是“32位”(可能是负数)整数或long,并且结果必须是[[ 0,2 ** 32]?换句话说,我需要一个与无符号长整数之间的C按位运算有效的Python对应物。编辑:具体问题是这样的:…

    崩溃后如何重新运行Linux? - python

                                                                                                                        我有从Linux(Cent OS)运行的Python脚本。如何永久运行此进程(脚本)?还是如崩溃后会重新运行? 参考方案 1路b…

    Python GPU资源利用 - python

    我有一个Python脚本在某些深度学习模型上运行推理。有什么办法可以找出GPU资源的利用率水平?例如,使用着色器,float16乘法器等。我似乎在网上找不到太多有关这些GPU资源的文档。谢谢! 参考方案 您可以尝试在像Renderdoc这样的GPU分析器中运行pyxthon应用程序。它将分析您的跑步情况。您将能够获得有关已使用资源,已用缓冲区,不同渲染状态上…

    Python:如何从字节中提取特定位? - python

    我有一条消息,显示为14 09 00 79 3d 00 23 27。我可以通过调用message[4]从此消息中提取每个字节,例如,这将给我3d。如何从该字节中提取单个8位?例如,如何将24-27位作为单个消息?只需28位? 参考方案 要回答问题的第二部分,您可以使用按位运算来获取特定的位值# getting your message as int i = …

    Python:图像处理可产生皱纹纸效果 - python

    也许很难描述我的问题。我正在寻找Python中的算法,以在带有某些文本的白色图像上创建皱纹纸效果。我的第一个尝试是在带有文字的图像上添加一些真实的皱纹纸图像(具有透明度)。看起来不错,但副作用是文本没有真正起皱。所以我正在寻找更好的解决方案,有什么想法吗?谢谢 参考方案 除了使用透明性之外,假设您有两张相同尺寸的图像,一张在皱纹纸上明亮,一张在白色背景上有深…