Max*_*axU 5 python math numpy scipy pandas
我有以下示例数据集:
In [222]: df
Out[222]:
ci_low circ_time_angle ci_high
0 30 30 30
1 10 0 20
2 -188 143 207
3 -188 4 207
4 -188 8 207
5 -188 14 207
6 -188 327 207
7 242 57 474
8 242 283 474
9 242 4 474
10 -190 200 -1
11 -90 300 0
12 -25 15 60
13 -30 349 350
14 420 30 600
15 -100 23 719
16 -100 23 259
17 -350 5 -10
18 -350 11 -10
Run Code Online (Sandbox Code Playgroud)
哪里:
ci_low -是循环置信区间(CI)的下限circ_time_angle -是我要检查它是否落入CI的角度ci_high -是循环置信区间(CI)的上限限制条件:
0 <= circ_time_angle <= 360ci_high >= ci_lowci_low和ci_high做不必然属于[0, 360](见行[2-18]的样本数据集)。问:这将是优雅的方式来检查角度是否circ_time_angle落入圆形的置信区间[ci_low, ci_high]?还是我需要单独检查所有边缘情况?
所需/结果数据集:
In [224]: res
Out[224]:
ci_low circ_time_angle ci_high falls_into_CI
0 30 30 30 True
1 10 0 20 False
2 -188 143 207 True
3 -188 4 207 True
4 -188 8 207 True
5 -188 14 207 True
6 -188 327 207 True
7 242 57 474 True
8 242 283 474 True
9 242 4 474 True
10 -190 200 -1 True
11 -90 300 0 True
12 -25 15 60 True
13 -30 349 350 True
14 420 30 600 False
15 -100 23 719 True
16 -100 23 259 True
17 -350 5 -10 False
18 -350 11 -10 True
Run Code Online (Sandbox Code Playgroud)
我还尝试将CI边界[0, 360]与转换为[-180, 180],但仍然无法帮我找到一个优雅的公式。
样本数据集设置:
In [222]: df
Out[222]:
ci_low circ_time_angle ci_high
0 30 30 30
1 10 0 20
2 -188 143 207
3 -188 4 207
4 -188 8 207
5 -188 14 207
6 -188 327 207
7 242 57 474
8 242 283 474
9 242 4 474
10 -190 200 -1
11 -90 300 0
12 -25 15 60
13 -30 349 350
14 420 30 600
15 -100 23 719
16 -100 23 259
17 -350 5 -10
18 -350 11 -10
Run Code Online (Sandbox Code Playgroud)
目前我提出了以下想法:
True为相应的行['ci_low', 'circ_time_angle', 'ci_high']ci_low == 0 circ_time_angle % 360 <= ci_high % 360代码:
def angle_falls_into_interval(angle, lower, upper, high=360):
# rotate ALL angles in the way,
# so that the lower angle = 0 degrees / radians.
lower = np.asarray(lower)
angle = np.asarray(angle) - lower
upper = np.asarray(upper) - lower
lower -= lower
return np.where(upper-lower >= high,
True,
(angle % high) <= (upper % high))
Run Code Online (Sandbox Code Playgroud)
查看:
In [232]: res = df.assign(falls_into_CI=angle_falls_into_interval(df.circ_time_angle,
df.ci_low,
df.ci_high,
high=360))
In [233]: res
Out[233]:
ci_low circ_time_angle ci_high falls_into_CI
0 30 30 30 True
1 10 0 20 False
2 -188 143 207 True
3 -188 4 207 True
4 -188 8 207 True
5 -188 14 207 True
6 -188 327 207 True
7 242 57 474 True
8 242 283 474 True
9 242 4 474 True
10 -190 200 -1 True
11 -90 300 0 True
12 -25 15 60 True
13 -30 349 350 True
14 420 30 600 False
15 -100 23 719 True
16 -100 23 259 True
17 -350 5 -10 False
18 -350 11 -10 True
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |