Python numpy 解包函数

标签 python python-2.7 numpy pi

我希望将弧度数组转换为范围 [0, 2*pi)numpy unwrap功能正是我需要的

但是,当我运行以下代码来输入 a = [pi, 2*pi, 3*pi] 时:

import numpy as np

a = np.array([np.pi, 2*np.pi, 3*np.pi])
np.unwrap(a)

我希望结果接近 [pi, 0, pi]。但是,输出仍然是:

array([ 3.14159265,  6.28318531,  9.42477796])

它没有展开。但是,如果我在不使用 numpy.pi

的情况下运行以下命令
a = np.array([3.14159265,  6.28318531,  9.42477796])
np.unwrap(a)

输出是正确的:

array([  3.14159265e+00,   2.82041412e-09,   3.14159265e+00])

这是怎么回事?

最佳答案

虽然接受的答案给了你想要的结果,但我认为它没有触及问题的核心,如果我正确地解释了你的问题,那么你实际上想要 wrap 你的阶段,而不是展开它。

np.unwrap 在这种情况下工作的原因,对您的数据进行了微小的更改,实际上是 np.unwrap 计算结果的原始方式的结果;它只是查找数据中的局部不连续性并相应地进行调整。以这种方式获得您要查找的结果是抽样错误的结果。换句话说,如果您通过插值来改进采样以获得 a = np.array([np.pi, 3*np.pi/2, 2*np.pi, 5*np.pi/2, 3 *np.pi]),调整数据将不再起作用。

一种更复杂的相位展开方法(例如傅里叶变换方法)将使您的数据展开,即使采样很差也是如此。

如果您真的想将数据限制为 [0, 2*pi)np.unwrap 是您所用内容的想。我能想到的结束阶段的最简单方法是使用模运算符:

import numpy as np

a = np.array([np.pi, 2 * np.pi, 3 * np.pi])
a_wrapped = a % (2 * np.pi)
print (a_wrapped)

当然因为采样误差,np.unwrap(a_wrapped)并没有返回你原来的a,所以可能不太清楚这是反的.但是,如果您改进采样,它确实会返回原始的 a:

import numpy as np

a = np.arange(0, 4 * np.pi, np.pi/10)
print (a)
a_wrapped = a % (2 * np.pi)
print (a_wrapped)
a = np.unwrap(a_wrapped)
print (a)

关于Python numpy 解包函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44664116/

相关文章:

python - 在 Python 中将分数年转换为实际日期

python - 如何制作动态数量的水平 BoxSizer?

python - 使用 pyodbc 连接 mdb 表

python - ValueError : malformed string when using ast. literal_eval

python - python 会检测无用的代码片段吗? (消除死代码)

python - 如何将png文件放入字符串并将其写入另一个文件

python - 为什么一些简短形式的条件语句在 python 中起作用而有些则不起作用?

python - 使用python,如何使用字典更改列表的值

python - 使用 numpy 数组时如何消除 for 循环并使用列表理解?

python - 在 Pandas 中有效地聚合重新采样的日期时间集合