Есть ли метод NumPy, который эквивалентен встроенному pop
для списков Python?
Popping, очевидно, не работает с массивами numpy, и я хочу избежать преобразования списка.
Есть ли метод NumPy, который эквивалентен встроенному pop
для списков Python?
Popping, очевидно, не работает с массивами numpy, и я хочу избежать преобразования списка.
Нет метода pop
для массивов NumPy, но вы можете просто использовать базовый срез (что было бы эффективно, поскольку оно возвращает представление, а не копию):
In [104]: y = np.arange(5); y
Out[105]: array([0, 1, 2, 3, 4])
In [106]: last, y = y[-1], y[:-1]
In [107]: last, y
Out[107]: (4, array([0, 1, 2, 3]))
Если бы существовал метод pop
, он возвращал значение last
в y
и изменял y
.
Выше,
last, y = y[-1], y[:-1]
присваивает последнее значение переменной last
и изменяет y
.
Вот один пример использования numpy.delete()
:
import numpy as np
arr = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
print(arr)
# array([[ 1, 2, 3, 4],
# [ 5, 6, 7, 8],
# [ 9, 10, 11, 12]])
arr = np.delete(arr, 1, 0)
print(arr)
# array([[ 1, 2, 3, 4],
# [ 9, 10, 11, 12]])
Pop не существует для массивов NumPy, но вы можете использовать индексацию NumPy в сочетании с реструктуризацией массива, например hstack/vstack или numpy.delete(), чтобы эмулировать выскакивание.
Вот некоторые примеры функций, которые я могу придумать (которые, по-видимому, не работают, когда индекс равен -1, но вы можете исправить это с помощью простого условного):
def poprow(my_array,pr):
""" row popping in numpy arrays
Input: my_array - NumPy array, pr: row index to pop out
Output: [new_array,popped_row] """
i = pr
pop = my_array[i]
new_array = np.vstack((my_array[:i],my_array[i+1:]))
return [new_array,pop]
def popcol(my_array,pc):
""" column popping in numpy arrays
Input: my_array: NumPy array, pc: column index to pop out
Output: [new_array,popped_col] """
i = pc
pop = my_array[:,i]
new_array = np.hstack((my_array[:,:i],my_array[:,i+1:]))
return [new_array,pop]
Это возвращает массив без всплывающей строки/столбца, а также всплывающей строки/столбца отдельно:
>>> A = np.array([[1,2,3],[4,5,6]])
>>> [A,poparow] = poprow(A,0)
>>> poparow
array([1, 2, 3])
>>> A = np.array([[1,2,3],[4,5,6]])
>>> [A,popacol] = popcol(A,2)
>>> popacol
array([3, 6])