#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, но я почти ничего не улучшил с этим.