Список индексирования с массивами из другого массива

#python #numpy

#питон #тупица

Вопрос:

Предположим, у меня есть основной список:

 mainlist= [  np.array([[ 604., 1464.],  [ 604., 1472.]]),   np.array([[ 612., 1483., 1455.],  [ 612., 1483., 1461.]]),   np.array([[2062., 2133.],  [2063., 2133.],  [2064., 2133.],  [2065., 2133.],  [2066., 2133.],  [2067., 2133.]]),  np.array([[769., 784., 783.],  [770., 784., 783.],  [771., 784., 783.],  [772., 784., 783.],  [773., 784., 783.]])   ]  

И массив индексов, такой как:

 index = np.array([[0, 1],  [1, 0],  [2, 1],  [2, 3],  [2, 4],  [3, 1],  [2, 2],  [3, 1]])  

где первый столбец является индексом массива mainlist , а второй столбец является индексом элемента этого массива. (т. е. [2, 3] означает 4-й элемент 3-го массива, который является [2065., 2133.])

Я хотел бы получить массивы из основного списка в списке индексов. Приведенные ниже коды выполняют свою работу правильно, но неэффективно. (выход-это мой ожидаемый результат)

 out=[] for i in range(0,len(index)):  out.append(mainlist[index[i][0]][index[i][1]])  

Использование циклов для индексирования заставляет меня чувствовать себя неловко. Кстати, в моем реальном наборе данных я имею дело примерно с миллионом строк. Как я могу сделать это быстрее и эффективнее?

Заранее спасибо!

Комментарии:

1. Первое улучшение, которое можно сделать — понимание списка: out = [основной список[индекс[i][0]][индекс[i][1]] для i в диапазоне(0, len(индекс)]

2. Спасибо @Sergius, но я почти ничего не улучшил с этим.