小编Ren*_*nan的帖子

MATLAB 和 SciPy 对“buttord”函数给出不同的结果

我正在尝试使用该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 = 5Wn = 99.581776302.

在 SciPy 中我尝试做同样的事情:

from numpy import pi
from scipy import …
Run Code Online (Sandbox Code Playgroud)

matlab signal-processing scipy

4
推荐指数
1
解决办法
930
查看次数

第一行和当前行之间的差异(按组)

我有一个这样的数据集:

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)

现在我需要计算每组第一行中的日期与当前行中的日期之间的差异。即每组的第一行:

  • 对于“AM”组,第一个日期是 2020-03-01;
  • 对于“BA”组,第一个日期是 2020-03-16;
  • 对于“RS”组,时间为 2020 年 4 月 1 日。

最后我想要的结果是:

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() 返回连续行之间的差异,我需要当前行和第一行之间的差异。

我怎样才能做到这一点?

pandas pandas-groupby

3
推荐指数
1
解决办法
1224
查看次数

从unittest测试调用时,argparse失败

在一个文件中(比方说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)

python python-2.7 argparse python-unittest

2
推荐指数
1
解决办法
4384
查看次数