如何";“银行标识代码”;使用自定义(非线性间隔)桶的numpy数组?

如何";“银行标识代码”;使用自定义(非线性间隔)桶的numpy数组?,numpy,scipy,binning,Numpy,Scipy,Binning,如何在numpy中“装箱”波纹管阵列,以便: import numpy as np bins = np.array([-0.1 , -0.07, -0.02, 0. , 0.02, 0.07, 0.1 ]) array = np.array([-0.21950869, -0.02854823, 0.22329239, -0.28073936, -0.15926265, -0.43688216, 0.03600587, -0.05101109, -0.24

如何在numpy中“装箱”波纹管阵列,以便:

import numpy as np
bins = np.array([-0.1 , -0.07, -0.02,  0.  ,  0.02,  0.07,  0.1 ])
array = np.array([-0.21950869, -0.02854823,  0.22329239, -0.28073936, -0.15926265,
              -0.43688216,  0.03600587, -0.05101109, -0.24318651, -0.06727875])
即用以下内容替换
数组中的

-0.1 where `value` < -0.085
-0.07 where -0.085 <= `value` < -0.045
-0.02 where -0.045 <= `value` < -0.01
0.0 where -0.01 <= `value` < 0.01
0.02 where 0.01 <= `value` < 0.045
0.07 where 0.045 <= `value` < 0.085
0.1 where `value` >= 0.085
我知道numpy有一个
数字化
功能,但是它返回的是箱子的索引,而不是箱子本身。即:

np.digitize(array, bins)
np.array([0, 2, 7, 0, 0, 0, 5, 2, 0, 2])

通过成对对连续的bin值求平均值来获得这些中间值。然后,使用
np.searchsorted
np.digitalize
使用中间值获取索引。最后,索引到输出的
容器中

中值:

mid_bins = (bins[1:] + bins[:-1])/2.0
带有
searchsorted
digize
的索引:

idx = np.searchsorted(mid_bins, array)
idx = np.digitize(array, mid_bins)
输出:

out = bins[idx]

您在哪里设置了存储箱分隔符值?分隔符值是手动创建的,仅用于说明存储箱的方法(最接近的值)。这与将1和2之间的所有值分组为1或2相反。例如,1.02到1或2。@Divakar抱歉忘记添加预期的输出-更新帖子以包含它的最后一个元素不是
-0.07
。同样也是最后三个。@Divakar你说得对,我又检查了一遍,把它修好了
out = bins[idx]