按值对Numpy数组元素排序

时间:2018-10-18 18:14:22

标签: python arrays numpy

说我有一个NxN值数组,我想通过对它们进行分类来对这些值进行排序,对于每个bin,返回原始副本,只保留对应的值,所有其他值都替换为零。例如,如果我有:

x = np.array([[1.1,2.2],[1.2,3.2]])
bins = np.array([1,2,3,4])

然后我想要:

output = [[[1.1,0.0],[1.2,0.0]],[[0.0,2.2],[0.0,0.0]],[[0.0,0.0],[0.0,3.2]]]

到目前为止我所拥有的:

Z = np.shape(x)[0]
Y = np.shape(x)[1]
X = np.shape(bins)[0]-1
output = np.broadcast_to(x, (X,Y,Z))

这将创建一个数组,其中包含每个bin的原始副本。然后我发现我会使用np.where将除正确值以外的所有值都设置为0.0,但是当我尝试考虑如何精确地编写它时,我的想法一片空白,我不确定这是否是最好的方法。 / p>

任何建议将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:0)

有点脏,但是您可以尝试

outputs = np.zeros(((len(bins)-1,) + x.shape))

for bin_idx, (inf, sup) in enumerate(zip(bins[:-1:1], bins[1::1])):
    outputs[bin_idx][np.where(np.logical_and(x>inf, x<sup))] = x[np.where(np.logical_and(x>inf, x<sup))]