首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Matlab wrapToPi和python np.unwrap

Matlab wrapToPi和python np.unwrap
EN

Stack Overflow用户
提问于 2017-12-12 02:26:13
回答 2查看 3.6K关注 0票数 0

我正在尝试将我的代码从Matlab移植到Python。除了Matlab的函数外,它似乎大部分都能工作。

代码语言:javascript
运行
复制
wrapToPi

我使用的是numpy的解包函数

代码语言:javascript
运行
复制
np.unwrap

模仿wrapToPi,但它似乎不起作用。在Matlab页面上,它说

lambdaWrapped = wrapToPi( lambda )以λ和弧度将角包装到−π区间。pi映射到pi,−pi映射到−pi。(通常,pi映射到pi的奇数,正倍数,π映射到−pi的奇数,负倍数。)

wrapToPi和np.unwrap有什么不同?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-12 06:49:03

Octave的mapping插件有以下代码:

代码语言:javascript
运行
复制
function xwrap = wrapToPi(x)

  xwrap = rem (x, 2*pi);
  idx = find (abs (xwrap) > pi);
  xwrap(idx) -= 2*pi * sign (xwrap(idx));

endfunction

unwrap中的numpyOctave (大概还有MATLAB)是完全不同的。

代码语言:javascript
运行
复制
>> x=linspace(-2*pi, 2*pi, 10)
x =
 Columns 1 through 8:
  -6.28319  -4.88692  -3.49066  -2.09440  -0.69813   0.69813   2.09440   3.49066
 Columns 9 and 10:
   4.88692   6.28319
>> wrapToPi(x)
ans =
 Columns 1 through 8:
   0.00000   1.39626   2.79253  -2.09440  -0.69813   0.69813   2.09440  -2.79253
 Columns 9 and 10:
  -1.39626   0.00000

numpy中,我可以通过以下方式复制:

代码语言:javascript
运行
复制
In [274]: x = np.linspace(-2*np.pi, 2*np.pi, 10)
In [275]: x
Out[275]: 
array([-6.28318531, -4.88692191, -3.4906585 , -2.0943951 , -0.6981317 ,
        0.6981317 ,  2.0943951 ,  3.4906585 ,  4.88692191,  6.28318531])
In [276]: xwrap=np.remainder(x, 2*np.pi)
In [277]: mask = np.abs(xwrap)>np.pi
In [278]: xwrap[mask] -= 2*np.pi * np.sign(xwrap[mask])
In [279]: xwrap
Out[279]: 
array([ 0.       ,  1.3962634,  2.7925268, -2.0943951, -0.6981317,
        0.6981317,  2.0943951, -2.7925268, -1.3962634,  0.       ])
票数 2
EN

Stack Overflow用户

发布于 2022-04-18 16:59:26

基于hpaulj的回答,这里有一个与Matlab完全相同的函数。只需确保输入为numpy数组即可。

代码语言:javascript
运行
复制
def wrapToPi(x):
    xwrap = np.remainder(x, 2 * np.pi)
    mask = np.abs(xwrap) > np.pi
    xwrap[mask] -= 2 * np.pi * np.sign(xwrap[mask])
    mask1 = x < 0
    mask2 = np.remainder(x, np.pi) == 0
    mask3 = np.remainder(x, 2 * np.pi) != 0
    xwrap[mask1 & mask2 & mask3] -= 2 * np.pi
    return xwrap
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47764452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档