我希望将弧度数组转换为range[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])
到底是怎么回事?
尽管已接受的答案可以为您提供所需的结果,但我认为这并没有成为问题的核心,如果我正确地解释了您的问题,那么您实际上是想包装自己的阶段,而不是拆开它。
np.unwrap
在这种情况下,对数据进行很小的更改的原因实际上是np.unwrap
计算结果的幼稚方式的结果。它只是在数据中查找局部不连续性并进行相应调整。以这种方式获得所需的结果是采样错误的结果。换句话说,如果您通过对get进行插值来改善采样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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句