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