按值对 Numpy 数组元素进行排序



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

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))

这将创建一个数组,其中包含每个箱的原始副本。然后我想我会使用 np.where 将除正确值之外的所有值设置为 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))]

最新更新