在多次调用的低级函数中,我需要执行与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
不是一个选项,因为它总是遍历整个数组。一旦找到第一个索引,我需要停止的东西。
编辑:与该问题有关的一些更具体的信息。
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中的算法,以在带有某些文本的白色图像上创建皱纹纸效果。我的第一个尝试是在带有文字的图像上添加一些真实的皱纹纸图像(具有透明度)。看起来不错,但副作用是文本没有真正起皱。所以我正在寻找更好的解决方案,有什么想法吗?谢谢 参考方案 除了使用透明性之外,假设您有两张相同尺寸的图像,一张在皱纹纸上明亮,一张在白色背景上有深…