Скажем, у меня есть массив значений 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))]