Функция ix_
Функция ix_ создает кортеж массивов
индексов, которые могут быть использованы
для векторной индексации многомерных массивов.
Функция принимает произвольное количество
одномерных массивов индексов и возвращает
кортеж массивов, преобразованных для
трансляции (broadcasting) при индексации.
Синтаксис
np.ix_(*args)
Пример
Выберем элементы из двумерного массива по индексам:
import numpy as np
arr = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
rows = np.array([0, 2])
cols = np.array([1, 3])
indices = np.ix_(rows, cols)
res = arr[indices]
print(res)
Результат выполнения кода:
[[ 2 4]
[10 12]]
Пример
Покажем структуру, создаваемую ix_:
import numpy as np
rows = np.array([0, 2, 3])
cols = np.array([1, 2])
indices = np.ix_(rows, cols)
print(indices)
Результат выполнения кода:
(array([[0],
[2],
[3]]), array([[1, 2]]))
Пример
Используем ix_ для выборки из трехмерного массива:
import numpy as np
arr = np.arange(27).reshape(3, 3, 3)
indices = np.ix_([0, 2], [1], [0, 2])
res = arr[indices]
print(res)
Результат выполнения кода:
[[[ 3 5]]
[[21 23]]]
Пример
Сравним ix_ с обычной индексацией:
import numpy as np
arr = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
rows = np.array([0, 2])
cols = np.array([1, 2])
with_ix = arr[np.ix_(rows, cols)]
without_ix = arr[rows][:, cols]
print(with_ix)
print(without_ix)
Результат выполнения кода:
[[2 3]
[8 9]]
[[2 3]
[8 9]]
Пример
Используем ix_ для замены элементов:
import numpy as np
arr = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
rows = np.array([0, 2])
cols = np.array([0, 2])
arr[np.ix_(rows, cols)] = 99
print(arr)
Результат выполнения кода:
[[99 2 99]
[ 4 5 6]
[99 8 99]]
Пример
Работа с несколькими измерениями:
import numpy as np
arr = np.random.randint(0, 100, (4, 5, 6))
indices = np.ix_([0, 3], [1, 4], [2])
res = arr[indices]
print(res.shape)
Результат выполнения кода:
(2, 2, 1)
Смотрите также
-
функцию
indices,
которая создает массив всех индексов -
функцию
unravel_index,
которая преобразует плоский индекс в многомерный -
функцию
ravel_multi_index,
которая преобразует многомерный индекс в плоский -
функцию
take,
которая выбирает элементы по индексам