сортировать элементы массива Numpy по значению

1

Скажем, у меня есть массив значений 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, но мои мысли пробелы, когда я пытаюсь подумать о том, как именно написать это, и я не уверен, что это лучший способ, в частности.

Любые предложения будут оценены, спасибо.

  • 0
    С помощью биннинга вы хотели бы сохранить все 1.x вместе, 2.x вместе и так далее? Иначе не понимаю, почему вторая группа и третья не слиты?
  • 0
    Да, верно, поэтому в этом случае ячеек будет [1,2,3,4], я буду редактировать вопрос
Теги:
arrays
numpy

1 ответ

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))]
  • 0
    Кажется, это работает, как вы сказали, я склонен думать, что есть более четкий ответ, но я думаю, что я могу хотя бы использовать это в настоящее время.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню