np.take() — это библиотечная функция numpy, которая возвращает элементы из массива по указанной оси и индексам. Это означает, что мы можем получить элементы массива по его индексам, и если ось упоминается, то все элементы, присутствующие в этом индексе, будут напечатаны по осям.
Функция numpy.take() в Python берет элементы из массива по оси. Функция take() делает то же самое, что и индексация массивов с использованием массивов; однако его может быть проще использовать, если вам нужны элементы вдоль заданной оси.
Синтаксис
|
1 |
numpy.take(array, indices, axis = None, out = None, mode =’raise’) |
Параметры
Функция np.take() может принимать четыре параметра:
- array: это массив, над которым мы будем работать.
- indices: это индексы значений, которые необходимо собрать.
- axis: это поле является необязательным. Это ось, по которой мы должны получить элементы. Его значение по умолчанию — «None»; в этом случае массив сглаживается.
- mode: режим. Есть три типа режима, которые влияют на то, как будет работать вне сети:
- raise: вызывает ошибку в случае выхода за границу.
- warp: деформация вокруг.
- clip: прикрепление к диапазону.
Помните, что это поле является необязательным.
Возвращаемое значение
Функция take() возвращает массив nD того же типа.
Примеры программ с методом numpy.take() в Python
Пример 1
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import numpy as np arr = np.array([(1, 2, 3),(4, 5, 6),(7, 8, 9),(50, 51, 52)]) #Printing the array print("The array is: ") print(arr) #Printing values without mentioning axis indices = [2, 7] print("Values at position 2 and 7 are: ", np.take(arr, indices)) #Printing valoues with axis indices = [0, 2] print("Values at position 0 and 2 are: \n", np.take(arr, indices, axis=1)) |
Выход
|
1 2 3 4 5 6 7 8 9 10 11 |
The array is: [[ 1 2 3] [ 4 5 6] [ 7 8 9] [50 51 52]] Values at position 2 and 7 are: [3 8] Values at position 0 and 2 are: [[ 1 3] [ 4 6] [ 7 9] [50 52]] |
Объяснение
В этом примере мы сначала объявили массив фигур 3×4 и напечатали этот массив. Затем мы хотели напечатать значения, указав их индексы с помощью take().
Сначала мы вызвали take() без упоминания оси, и мы видим, что в индексах мы дали значение [2,7]. Поскольку ось не указана, массив был сглажен, и были напечатаны значения по индексам 2 и 7.
Во втором случае мы упомянули ось = 1, которая будет печатать значения по столбцам и индексы = [0,2]. Мы видим, что получили результат в виде матрицы 2×4. take() напечатал значения столбца с индексами 0 и 2 соответственно.
Пример 2
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import numpy as np arr = np.array([(1, 2, 3),(4, 5, 6),(7, 8, 9),(50, 51, 52)]) #Printing the array print("The array is: ") print(arr) #Printing values mode=warp indices = [0, 6] print("Values at position 0 and 6 are [mode=warp]:\n ", np.take(arr, indices, axis=1, mode='warp')) #Printing values mode=clip indices = [1, 5] print("Values at position 1 and 5 are [mode=clip]:\n ", np.take(arr, indices, axis=1, mode='clip')) #Printing values mode=raise indices = [2, 7] print("Values at position 2 and 7 are [mode=raise]:\n ", np.take(arr, indices, axis=1, mode='raise')) |
Выход
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
The array is: [[ 1 2 3] [ 4 5 6] [ 7 8 9] [50 51 52]] Values at position 0 and 6 are [mode=warp]: [[ 1 1] [ 4 4] [ 7 7] [50 50]] Values at position 1 and 5 are [mode=clip]: [[ 2 3] [ 5 6] [ 8 9] [51 52]] Traceback(most recent call last): File "take2.py", line 21, in <module> print("Values at position 2 and 7 are [mode=raise]:\n ",np.take(arr,indices,axis=1,mode='raise')) File "/usr/lib/python3/dist-packages/numpy/core/fromnumeric.py", line 189, in take return _wrapfunc(a, 'take', indices, axis=axis, out=out, mode=mode) File "/usr/lib/python3/dist-packages/numpy/core/fromnumeric.py", line 56, in _wrapfunc return getattr(obj, method)(*args, **kwds) IndexError: index 7 is out of bounds for size 3 |
Объяснение
В этом примере мы объявили массив фигур 3×4 и напечатали этот массив.
В первом случае мы видим, что заданы значения индексов [0,6] и оси =1; у нас нет такой оси с индексом 6. Когда мы вызывали take(), мы передавали mode=’warp’; когда мы пытались вывести индекс за границы, режим «warp» деформировал массив и печатал значения без каких-либо ошибок.
Во втором случае мы указали mode=’clip’; мы видим, что массив был обрезан и значения были напечатаны. Наконец, мы указали mode=’raise’, так как этот режим вызывает ошибку в случае выхода за границу, мы получили ошибку на выходе.
