Y at-il une méthode numpy qui équivaut à la construction dans les pop
pour les listes de python? popping ne fonctionne évidemment pas sur les tableaux numpy, et je veux éviter une conversion de liste.
Il n'y a pas de méthode pop
pour les tableaux NumPy, mais vous pouvez simplement utiliser le découpage en tranches de base (ce qui serait efficace car il renvoie une vue et non une copie):
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]))
S'il existait une méthode pop
, elle renverrait la valeur last
dans y
et modifierait y
.
Au dessus de,
last, y = y[-1], y[:-1]
assigne la dernière valeur à la variable last
et modifie y
.
Voici un exemple en utilisant 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]])
Le pop n'existe pas pour les tableaux NumPy, mais vous pouvez utiliser l'indexation NumPy en combinaison avec la restructuration du tableau, par exemple hstack/vstack ou numpy.delete (), pour émuler le popping.
Voici quelques exemples de fonctions auxquelles je peux penser (qui, apparemment, ne fonctionnent pas lorsque l'index est -1, mais vous pouvez résoudre ce problème avec un simple conditionnel):
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]
Ceci retourne le tableau sans la ligne/colonne sautée, ainsi que la ligne/colonne sautée séparément:
>>> 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])