Итак, проблема заключается в следующем;учитывая неуклюжий массив с n строками и списком из n индексов (от i_1 до i_n), вернуть список, содержащий элемент i_m из row_m для всех строк.
Это можно сделать так:
import awkward
some_awkward_array = awkward.fromiter([[1,2],[3,4,5],[6]])
some_indices = [0,2,0]
desired_elements = [row[i] for row, i in zip(some_awkward_array, some_indices)]
assert desired_elements == [1,5,6]
Но если бы это был простой массив, у нас был бы доступ к choose
, и мы могли бы сделать;
import numpy as np
some_numpy_array = np.array([[1,2,0],[3,4,5],[6,0,0]])
some_indices = [0,2,0]
desired_elements = np.choose(some_indices, some_numpy_array.T)
assert desired_elements == [1,5,6]
Вторая версия, кажется, масштабируется лучше, она становится быстрее где-то вокруг 12 строк. Есть ли эквивалентная опция для неудобного массива?
Edit;может быть, это IndexedMaskedArray
вещь, но я не могу заставить ее делать то, что я хочу.