gpt4 book ai didi

python - Numpy 将角度范围从 (-Pi, Pi) 转换为 (0, 2*Pi)

转载 作者:太空狗 更新时间:2023-10-29 18:00:04 31 4
gpt4 key购买 nike

这看起来非常简单,但我似乎无法弄清楚如何将 -Pi 和 Pi 之间的角度映射到 0 到 2Pi 的范围内。我尝试使用 np.select 但由于某种原因它卡住了我的程序。我需要这个范围内的角度,因为它们将用作不能输出负数的神经网络的训练数据。

audio = wav.read('/home/chase/Desktop/ge.wav')[1].astype(np.float32)
audio = np.mean(audio, 1)
audio /= np.max(np.abs(audio))
audio = np.array([np.fft.rfft(audio[i:i + FRAME_SIZE]) for i in range(0, len(audio) - len(audio) % FRAME_SIZE, FRAME_SIZE)])
audio /= FRAME_SIZE
audio_mag = np.abs(audio)
audio_phase = np.angle(audio)

#this line freezes the program
audio_phase = np.select(audio_phase < 0 , 2 * np.pi + audio_phase, audio_phase)

我需要音频

最佳答案

这里有几种不同的方法完成计时:

In [1]: import numpy as np; from numpy import linspace, pi

In [2]: N=10000

In [3]: %timeit x=linspace(-pi, pi, N); np.where(x<0 , 2*pi+x, x)
10000 loops, best of 3: 79.1 µs per loop

In [4]: %timeit x=linspace(-pi, pi, N); np.select(x<0 , 2*pi+x, x)
1 loops, best of 3: 354 ms per loop

In [5]: %timeit x=linspace(-pi, pi, N); x[x<0] += 2*pi
10000 loops, best of 3: 82.5 µs per loop

In [6]: %timeit x=linspace(-pi, pi, N); (x + 2*pi)*(x<0) + x*(x>=0)
10000 loops, best of 3: 149 µs per loop

In [7]: %timeit x=linspace(-pi, pi, N); (x + 2*pi)%(2*pi)
10000 loops, best of 3: 192 µs per loop

我找到了 x[x<0] += 2*pi最易读,但是 where(x<0, x+2*pi, x)速度稍快。 select表单是迄今为止最慢的。

为了比较,这是同一台机器上的普通 linspace 函数:

In [8]: %timeit x=linspace(-pi, pi, N)
10000 loops, best of 3: 35.9 µs per loop

鉴于程序在 select 而不是更昂贵的 fft 函数上失败,您可能会遇到内存不足的情况,数组分页到磁盘(x<02*pi+x 生成数组,加上你有原始的 xselect 创建的返回值)。如果是这种情况,那么您最好逐帧校正相位。

关于python - Numpy 将角度范围从 (-Pi, Pi) 转换为 (0, 2*Pi),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37358016/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com