如何获得带有周期的复杂参数的角度? - python

例子1

例如,我有一系列的向量

vectors = [
    [1+1j], [1j], [-1+1j], [-1], [-1-1j], [-1j], [1-1j], [1], 
    [1+1j], [1j], [-1+1j], [-1], [-1-1j], [-1j], [1-1j], [1], 
]

您可能会发现vectors中的16个元素实际上围绕坐标原点逆时针旋转了45度(或pi / 4弧度)。所以我真正需要的是

  pi/4,  2*pi/4,  3*pi/4,  4*pi/4,  5*pi/4,  6*pi/4,  7*pi/4,  8*pi/4, 
9*pi/4, 10*pi/4, 11*pi/4, 12*pi/4, 13*pi/4, 14*pi/4, 15*pi/4, 16*pi/4

但是np.angle(vectors)得到

pi/4, 2*pi/4, 3*pi/4, 4*pi/4, -3*pi/4, -2*pi/4, -pi/4, 0,
pi/4, 2*pi/4, 3*pi/4, 4*pi/4, -3*pi/4, -2*pi/4, -pi/4, 0

例子2

例如,我有一系列矢量

vectors = [
    [1], [1-j], [-1j], [-1-1j], [-1], [-1+1j], [1j], [1+1j], 
    [1], [1-j], [-1j], [-1-1j], [-1], [-1+1j], [1j], [1+1j], 
]

您可能会发现vectors中的16个元素实际上围绕坐标原点顺时针旋转了彼此45度(或pi / 4弧度)。所以我真正需要的是

 0*pi/4, -1*pi/4,  -2*pi/4,  -3*pi/4,  -4*pi/4,  -5*pi/4,  -6*pi/4,  -7*pi/4, 
-8*pi/4, -9*pi/4, -10*pi/4, -11*pi/4, -12*pi/4, -13*pi/4, -14*pi/4, -15*pi/4

例子3

对于

vectors = [
    [1-1j], [-1j], [-1-1j], [-1], [-1+1j], [1j], [1+1j], [1], 
    [1-1j], [-1j], [-1-1j], [-1], [-1+1j], [1j], [1+1j], [1], 
]

我需要答案

 -*pi/4,  -2*pi/4,  -3*pi/4,  -4*pi/4,  -5*pi/4,  -6*pi/4,  -7*pi/4,  -8*pi/4, 
-9*pi/4, -10*pi/4, -11*pi/4, -12*pi/4, -13*pi/4, -14*pi/4, -15*pi/4, -15*pi/4

一般声明或我需要的

那么如何制作一个新的angle_with_period函数,该函数满足以下条件

输入参数是列表/数组[v1, v2, v3...],并且abs(v [i]和v [i + 1]之间的角度)始终不大于pi
angle_with_period计算复平面上每个元素与正实轴的夹角
对于v1,angle_with_period的行为类似于np.angle,即

    在| 0 | 1 + 1j | -1 | -1-1j | 1-1j |
    ---- + ------- + -------- + -------- + -------- + ------- +
    出| 0 | pi / 4 | 4 * pi / 4 | -3 * pi / 4 | -pi / 4 |

如果vecAnswer = angle_with_period([v1, v2, v3...]),则vecAnswer是单调增加或减少的数组

谢谢

参考方案

这是使用diffmodcumsum的一种方法:

def mono_angle(x):
    a = np.angle(x)
    b = np.trim_zeros(a, 'f')
    if b.size==0: return a
    b[1:] = np.diff(b) % (np.sign(b[0])*2*np.pi)
    a[-b.size:] = b.cumsum()
    return a

例如:

>>> vectors = [
...     [1], [1-1j], [-1j], [-1-1j], [-1], [-1+1j], [1j], [1+1j], 
...     [1], [1-1j], [-1j], [-1-1j], [-1], [-1+1j], [1j], [1+1j], 
... ]
>>> mono_angle(np.ravel(vectors))
array([  0.        ,  -0.78539816,  -1.57079633,  -2.35619449,
        -3.14159265,  -3.92699082,  -4.71238898,  -5.49778714,
        -6.28318531,  -7.06858347,  -7.85398163,  -8.6393798 ,
        -9.42477796, -10.21017612, -10.99557429, -11.78097245])

注意:您可能还想查看类似的np.unwrap。它适用于您的示例,但通常与您的描述不符。

在树莓派上运行python脚本 - python

我正在研究rapiberry pi 3大约3个月,开始使用它时遇到了问题。我找不到在树莓派打开时在其上运行python脚本的有效,安全的方法(没有监视器,鼠标和键盘)。此刻,我在/ etc / profile中添加了“ $ sudo run myscript.py&”但是有时候,当我打开它时,直到将显示器,鼠标和键盘连接到该脚本并使用GUI运行脚本,脚本才能…

如果一个Cron作业失败,请继续执行下一个作业 - python

我已经设置了Crontab来执行一系列Python脚本,以便查询太阳能逆变器并将结果上传到PVOutput:*/5 * * * * cd /home/Pi/; python pvout_upload.py; */5 * * * * cd /home/Pi/; python weather.py; 问题是如果Internet断开,则这些脚本将失败。因此,我创建…

Python GPU资源利用 - python

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

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

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

Python uuid4,如何限制唯一字符的长度 - python

在Python中,我正在使用uuid4()方法创建唯一的字符集。但是我找不到将其限制为10或8个字符的方法。有什么办法吗?uuid4()ffc69c1b-9d87-4c19-8dac-c09ca857e3fc谢谢。 参考方案 尝试:x = uuid4() str(x)[:8] 输出:"ffc69c1b" Is there a way to…