4

我有一个 256x938 的矩阵。我需要遍历每个单独的元素,看看它是否在 -pi < element < pi 范围内,如果不是,那么我们需要减去或添加 2*pi 的倍数才能得到该范围内的元素。最好不使用 for 循环,因为我们发现它们非常低效。

4

3 回答 3

4

Not unlike the other solutions posed, but a bit cleaner since it requires only one simple line of code...

B = mod(A+pi,2*pi) - pi;

A = -20:2:20;
mod(A+pi,2*pi) - pi
ans =
  Columns 1 through 12
 -1.1504  0.84956 2.8496 -1.4336  0.56637 2.5664 -1.7168  0.28319 2.2832   -2   0  2

  Columns 13 through 21
 -2.2832 -0.28319 1.7168 -2.5664 -0.56637 1.4336 -2.8496 -0.84956 1.1504
于 2012-11-15T00:43:56.460 回答
1

这是你想要的吗?

B=rem(A,2*pi)
B(A<-pi)=A(A<-pi)+2*pi
B(A>pi)=A(A>pi)-2*pi

中的每个元素b都是Bnow -pi <= b <= pi

它不能成为-pi < b < pi问题中所要求的。

于 2012-11-14T23:28:59.500 回答
0

我现在手头没有 Matlab,所以我的建议可能行不通,但我希望这个想法能行。

尝试这种方式:

c = cos(B); % will set all your elements between [-1 1]
B2 = acos(c);  % will return values between [0 PI] but for some the sign will be wrong
B2 = B2.*sign(sin(B)); % should set the correct sign for each element.

希望这有效。

我本可以将所有三行浓缩为 1,但我试图使这个想法尽可能清晰。

于 2012-11-15T03:26:02.087 回答