Выбор многомерных целочисленных индексов в 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 массивов.

0 ответов

Другие вопросы по тегам