asc*_*ter 10 python arrays numpy
我有一组(随机)浮点数.我想将每个值四舍五入到任意网格的限制.请参阅以下示例:
import numpy as np
np.random.seed(1)
# Setup
sample = np.random.normal(loc=20, scale=6, size=10)
intervals = [-np.inf, 10, 12, 15, 18, 21, 25, 30, np.inf]
# Round each interval up
for i in range(len(intervals) - 1):
sample[np.logical_and(sample > intervals[i], sample <= intervals[i+1])] = intervals[i+1]
Run Code Online (Sandbox Code Playgroud)
这导致:
[ 30. 18. 18. 15. 30. 10. inf 18. 25. 21.]
Run Code Online (Sandbox Code Playgroud)
我该如何避免for循环?我确信有一些方法可以使用我现在看不到的NumPy阵列魔法.
如果intervals已排序,您可以使用np.searchsorted:
np.array(intervals)[np.searchsorted(intervals, sample)]
# array([ 30., 18., 18., 15., 30., 10., inf, 18., 25., 21.])
Run Code Online (Sandbox Code Playgroud)
searchsorted 返回元素所属的区间索引:
np.searchsorted(intervals, sample)
# array([7, 4, 4, 3, 7, 1, 8, 4, 6, 5])
Run Code Online (Sandbox Code Playgroud)
默认值side='left'返回此间隔的最小索引,结果将进入左开,右关闭方案.
| 归档时间: |
|
| 查看次数: |
632 次 |
| 最近记录: |