我正在尝试使用该buttord函数设计一个模拟巴特沃斯滤波器(实际上,我正在将一个从 MATLAB 调用该函数的程序移植到 Python)。
我的参数是:
通带频率 (Fp) = 10 Hz,得出 Wp = 2*pi*10 Hz
阻带频率 (Fs) = 100 Hz,得出 Ws = 2*pi*100 Hz
通带和阻带损耗/衰减(Rp、Rs)分别为 3 和 80 dB。
在 MATLAB 中我使用以下代码:
Wp = 2 * pi * 10
Ws = 2 * pi * 100
Rp = 3
Rs = 80
[N, Wn] = buttord(Wp, Ws, Rp, Rs, 's')
Run Code Online (Sandbox Code Playgroud)
这给了我N = 5,Wn = 99.581776302.
在 SciPy 中我尝试做同样的事情:
from numpy import pi
from scipy import …Run Code Online (Sandbox Code Playgroud) 我有一个这样的数据集:
state,date,events_per_day
AM,2020-03-01,100
AM,2020-03-02,120
AM,2020-03-15,200
BA,2020-03-16,80
BA,2020-03-20,100
BA,2020-03-29,150
RS,2020-04-01,80
RS,2020-04-05,100
RS,2020-04-11,160
Run Code Online (Sandbox Code Playgroud)
现在我需要计算每组第一行中的日期与当前行中的日期之间的差异。即每组的第一行:
最后我想要的结果是:
state,date,events_per_day,days_after_first_event
AM,2020-03-01,100,0
AM,2020-03-02,120,1 <--- 2020-03-02 - 2020-03-01
AM,2020-03-15,200,14 <--- 2020-03-14 - 2020-03-01
BA,2020-03-16,80,0
BA,2020-03-20,100,4 <--- 2020-03-20 - 2020-03-16
BA,2020-03-29,150,13 <--- 2020-03-29 - 2020-03-16
RS,2020-04-01,80,0
RS,2020-04-05,100,4 <--- 2020-04-05 - 2020-04-01
RS,2020-04-11,160,10 <--- 2020-04-11 - 2020-04-01
Run Code Online (Sandbox Code Playgroud)
我发现如何使用 pandas 按组计算时间差?这几乎就是我想要的。但是, diff() 返回连续行之间的差异,我需要当前行和第一行之间的差异。
我怎样才能做到这一点?
在一个文件中(比方说parser.py)我有:
import argparse
def parse_cmdline(cmdline=None):
parser = argparse.ArgumentParser()
parser.add_argument('--first-param',help="Does foo.")
parser.add_argument('--second-param',help="Does bar.")
if cmdline is not None:
args = parser.parse_args(cmdline)
else:
args = parser.parse_args()
return vars(args)
if __name__=='__main__':
print parse_cmdline()
Run Code Online (Sandbox Code Playgroud)
果然,当从命令行调用它时,它会起作用并给我很多我期望的东西:
$ ./parser.py --first-param 123 --second-param 456
{'first_param': '123', 'second_param': '456'}
Run Code Online (Sandbox Code Playgroud)
但后来我想要unittest它,因此我写了一个test_parser.py文件:
import unittest
from parser import parse_cmdline
class TestParser(unittest.TestCase):
def test_parse_cmdline(self):
parsed = parse_cmdline("--first-param 123 --second-param 456")
self.assertEqual(parsed['first_param'],'123')
self.assertEqual(parsed['second_param'],'456')
if __name__ == '__main__':
unittest.main()
Run Code Online (Sandbox Code Playgroud)
然后我收到以下错误:
usage: test_parser.py [-h] [--first-param FIRST_PARAM]
[--second-param SECOND_PARAM]
test_parser.py: …Run Code Online (Sandbox Code Playgroud)