Рассмотрим вариант numpy.ndarray
D1 с формой (10,N,M)
.
Я бы хотел построить новый ndarray O1 с формой (N*M,3)
.так, что:
- каждый элемент является триплетом, который идентифицирует индекс элемента по D1
- , индексы сортируются согласно их значению соответствующих полей в D1
- для каждого
0≤i≤N
, 0≤j≤M
рассматривается только минимальный элемент из 10 измерений.
Давайте рассмотрим небольшой пример с 2 вместо 10 и текущий подход, который частично достигает моей цели:
>>> d1 = np.random.randint(20, size=2*3*3).reshape(2,3,3)
array([[[ 2, 6, 18],
[18, 18, 10],
[ 2, 3, 1]],
[[11, 3, 14],
[12, 14, 18],
[ 6, 8, 19]]])
>>> d2 = np.amin(d1, axis=0)
array([[ 2, 3, 14],
[12, 14, 10],
[ 2, 3, 1]])
>>> o1 = np.dstack(np.unravel_index(np.argsort(d2.ravel()), d2.shape))
array([[[2, 2],
[0, 0],
[2, 0],
[0, 1],
[2, 1],
[1, 2],
[1, 0],
[0, 2],
[1, 1]]])
Таким образом, я получаю минимальные индексы для элементов по отношению к измерению 2, но я теряю информацию о начальных индексах в D1.
Ожидаемый результат должен быть в этом случае:
array([[[0, 2, 2],
[0, 0, 0],
[0, 2, 0],
[1, 0, 1],
[0, 2, 1],
[0, 1, 2],
[1, 1, 0],
[1, 0, 2],
[1, 1, 1]]])