Выбор многомерных целочисленных индексов в numy ndarray
Мне трудно понять, какие правила необходимы для обеспечения выбора с помощью многомерных индексов в ndarrays.
Допустим, у меня есть массив 4dim. Я хотел бы "сжать" массив, выбрав наименьшие значения в 1-м измерении (важно сохранить информацию о том, какое из них было выбрано).
np.random.seed(100)
arr = np.random.uniform(size=100).reshape([2,5,2,5])
# array([[[[ 0.54340494, 0.27836939, 0.42451759, 0.84477613, 0.00471886],
# [ 0.12156912, 0.67074908, 0.82585276, 0.13670659, 0.57509333]],
# [[ 0.89132195, 0.20920212, 0.18532822, 0.10837689, 0.21969749],
# [ 0.97862378, 0.81168315, 0.17194101, 0.81622475, 0.27407375]],
# [[ 0.43170418, 0.94002982, 0.81764938, 0.33611195, 0.17541045],
# [ 0.37283205, 0.00568851, 0.25242635, 0.79566251, 0.01525497]],
# [[ 0.59884338, 0.60380454, 0.10514769, 0.38194344, 0.03647606],
# [ 0.89041156, 0.98092086, 0.05994199, 0.89054594, 0.5769015 ]],
# [[ 0.74247969, 0.63018394, 0.58184219, 0.02043913, 0.21002658],
# [ 0.54468488, 0.76911517, 0.25069523, 0.28589569, 0.85239509]]],
# [[[ 0.97500649, 0.88485329, 0.35950784, 0.59885895, 0.35479561],
# [ 0.34019022, 0.17808099, 0.23769421, 0.04486228, 0.50543143]],
# [[ 0.37625245, 0.5928054 , 0.62994188, 0.14260031, 0.9338413 ],
# [ 0.94637988, 0.60229666, 0.38776628, 0.363188 , 0.20434528]],
# [[ 0.27676506, 0.24653588, 0.173608 , 0.96660969, 0.9570126 ],
# [ 0.59797368, 0.73130075, 0.34038522, 0.0920556 , 0.46349802]],
# [[ 0.50869889, 0.08846017, 0.52803522, 0.99215804, 0.39503593],
# [ 0.33559644, 0.80545054, 0.75434899, 0.31306644, 0.63403668]],
# [[ 0.54040458, 0.29679375, 0.1107879 , 0.3126403 , 0.45697913],
# [ 0.65894007, 0.25425752, 0.64110126, 0.20012361, 0.65762481]]]])
_worstof_dim0 = np.array(np.argmin(arr, axis=0),dtype='uint8')
# array([[[0, 0, 1, 1, 0],
# [0, 1, 1, 1, 1]],
#
# [[1, 0, 0, 0, 0],
# [1, 1, 0, 1, 1]],
#
# [[1, 1, 1, 0, 0],
# [0, 0, 0, 1, 0]],
#
# [[1, 1, 0, 0, 0],
# [1, 1, 0, 1, 0]],
#
# [[1, 1, 1, 0, 0],
# [0, 1, 0, 1, 1]]], dtype=uint8)
arr.shape
## (2, 5, 2, 5)
_worstof_dim0.shape
## (5, 2, 5)
Размерность _worstof_dim0
это именно то, что ожидается, первое измерение сократилось до размера один. У нас есть индекс наименьшего элемента в первом измерении для оригинального ndarray.
Как я могу выбрать индексы _worstof_dim0
от arr
? Я ожидал бы использовать arr[_worstof_dim0,...].shape
и получить (1,5,2,5)
, но NumPy делает неожиданное странное измерение (5, 2, 5, 5, 2, 5)
, Это чепуха для меня.
Не могли бы вы уточнить, как этого добиться? (или ссылка на учебник или упражнения). Я не могу познакомиться со стратегиями выбора в многомерных установках. Большинство учебников остаются на начальном уровне 1D или 2D массивов.