In [199]: main_arr = np.array([[3, 7, 4], [2, 5, 6]])
...: guide_arr = np.array([[2, 0, 1], [0, 2, 1]])
...:
Обычный способ переупорядочения столбцов, в котором порядок строк различается, заключается в следующем:
In [200]: main_arr[np.arange(2)[:,None],guide_arr]
Out[200]:
array([[4, 3, 7],
[2, 6, 5]])
arange(2)[:,None]
- это массив столбцов, который вещает с индексным массивом (2,3).
Мы можем применить ту же идею к использованию guide_arr
для идентификации столбцов в result
:
In [201]: result = np.zeros_like(main_arr)
In [202]: result[np.arange(2)[:,None], guide_arr] = main_arr
In [203]: result
Out[203]:
array([[7, 4, 3],
[2, 6, 5]])
Это может прояснить, как работает трансляция:
In [204]: np.broadcast_arrays(np.arange(2)[:,None], guide_arr)
Out[204]:
[array([[0, 0, 0],
[1, 1, 1]]),
array([[2, 0, 1],
[0, 2, 1]])]