Извлечение элементов из 2 -й массивы с использованием индексов из другого массива
В Numpy иногда становится необходимым для извлечения определенных элементов из многомерного массива на основе индексов, хранящихся в другом уборе. Этот сценарий часто возникает при работе со структурами данных, такими как разреженные матрицы или индексированные выборы.
:
рассмотрим два массива numpy:
A = np.array([[0, 1], [2, 3], [4, 5]]) B = np.array([[1], [0], [1]]) # Index array
цель состоит в том, чтобы извлечь один элемент из каждой строки a, где конкретный элемент определяется индексом в соответствующем ряду B. [5]])
C = np.array([[1], [2], [5]])solutions:
1. Чиковое целочисленное массив Индексирование:
a [np.arange (a.shape [0]), b.ravel ()]
A[np.arange(A.shape[0]), B.ravel()]
2. Транспонировать и np.choose:
np.choose (b.ravel (), a.t)
np.choose(B.ravel(), A.T)
*a = a.t C = np.array ([*Zip (*a)] [i] для i в b.ravel ())
Этот метод использует итерационную распаковку для преобразования в список строк, а затем итерации над рядами A, основанных на индексах в B, чтобы извлечь желаемые элементы. Список понимания и вещания:
*A = A.T C = np.array([*zip(*A)][i] for i in B.ravel())
list postressions может быть использован для создания новой массивы, а не элементы и B и выполняют элементы. Выбор.
5. Причудливый индексация (numpy> = 1.18):
[A[i][j] for i, j in zip(range(A.shape[0]), B.ravel())]
причудливый индексирование позволяет обеспечивать более эффективные и компактные индексации. В этом случае он создает 2D -массив с индексами строк и индексами B, которые можно использовать для выбора нужных элементов из a.
, наиболее подходящее решение зависит от конкретных требований и ограничений задачи, таких как эффективность, читаемость и совместимость с более старыми версиями Numpy. ]]
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3