当前位置: 首页 > 面试题库 >

有效地检测python中的符号变化

颛孙镜
2023-03-14
问题内容

我想做的正是这个家伙所做的:

Python-计算符号变化

但是,我需要对其进行优化以使其超快运行。简而言之,我想采用一个时间序列,并告诉它每次穿越时都越过零(更改符号)。我想记录两次过零之间的时间。由于这是真实数据(32位浮点数),我怀疑我每个人都有一个正好为零的数字,所以这并不重要。我目前有一个计时程序,所以我将为您的成绩计时,以查看谁获胜。

我的解决方案给出了(微秒):

open data       8384
sign data       8123
zcd data        415466

如您所见,过零检测器是最慢的部分。这是我的代码

import numpy, datetime

class timer():
    def __init__(self):
        self.t0 = datetime.datetime.now()
        self.t = datetime.datetime.now()
    def __call__(self,text='unknown'):
        print text,'\t',(datetime.datetime.now()-self.t).microseconds
        self.t=datetime.datetime.now()

def zcd(data,t):
    sign_array=numpy.sign(data)
    t('sign data')
    out=[]
    current = sign_array[0]
    count=0
    for i in sign_array[1:]:
        if i!=current:
            out.append(count)
            current=i
            count=0
        else: count+=1
    t('zcd data')
    return out

def main():
    t = timer()
    data = numpy.fromfile('deci.dat',dtype=numpy.float32)
    t('open data')
    zcd(data,t)

if __name__=='__main__':
    main()

问题答案:

关于什么:

import numpy
a = [1, 2, 1, 1, -3, -4, 7, 8, 9, 10, -2, 1, -3, 5, 6, 7, -10]
zero_crossings = numpy.where(numpy.diff(numpy.sign(a)))[0]

输出:

> zero_crossings
array([ 3,  5,  9, 10, 11, 12, 15])

即,zero_crossings将包含 之前 发生零交叉的元素的索引。如果要在 之后 的元素,只需将1添加到该数组。



 类似资料:
  • 问题内容: 我有一个带有正负值的numpy数组。 我想创建另一个数组,该数组在发生索引变化的每个索引处包含一个值(例如,如果当前元素为正,而前一个元素为负,反之亦然)。 对于上面的数组,我希望得到以下结果 或者,可以使用数组中发生符号变化的位置列表或布尔值列表(而不是0和1)代替。 问题答案: 就像是 现在,numpy.roll进行循环移位,因此,如果最后一个元素的符号与第一个元素不同,则sign

  • 问题内容: 有什么方法可以在python中每次变量值更改时调用函数? 像听众一样吗? 具体来说,我指的 是 像GAE-Session这样的脚本之间 仅共享变量 的情况 。(使用Cookie,Memcache等共享数据) 示例:ScriptA和ScriptB,共享一个会话变量。当脚本B进行更改时,SctiptA必须调用一个方法来处理该更改。 问题答案: 使用属性。首先,可变值可以更改。

  • 问题内容: 一种有效的方法来检查Python中的字符串是否仅包含一个字符,例如?像这样的行为: 两种看似效率低下的方法是:首先将字符串转换为列表并检查每个元素,其次使用正则表达式。有没有更有效的方法,或者这些是Python中最好的方法?谢谢。 问题答案: 到目前为止,这是最快的,甚至比它快几倍,只需使用出色的mgilson计时套件即可: 在这里,所有检查都是在Python C代码中完成的,它只是:

  • 这似乎应该是简单的,但我没有找到太多相关的它。我有一个结构,它有不同的字段用来存储关于程序操作的数据。我想记录这些数据,以便以后分析。试图在程序运行过程中连续记录数据会消耗大量资源。因此,我只想在数据发生变化时调用日志记录函数。如果有一种有效的方法来检查结构成员是否更新了,我会很高兴的。目前我正在玩一个有3个结构(旧的、当前的和新的)的shell游戏,以便检测数据何时发生了变化。提前道谢。

  • 问题内容: 给定一个Java“文件”对象,如何检测它是否指向符号链接? (如果有帮助/重要,我知道该文件引用的是目录,而不是文件) 问题答案: 您也可以使用isSymbolicLink(Pathpath)方法。它将更加可靠。 Java Doc“检测符号链接 ”中的类似示例。

  • 本文向大家介绍python检测IP地址变化并触发事件,包括了python检测IP地址变化并触发事件的使用技巧和注意事项,需要的朋友参考一下 IoT PoC项目中需要展示视频采集源进行wifi切换后(表明视频采集源端发生了移动),接收端观看到的视频的流畅度,以及当接收端进行移动时,检测视频的流畅度,故需要一个模块周期性地探测本地IP是否变化,以指示设备的移动性。 操作:当设备做为视频接受者发生移动时