2 votes

Supprimer les colonnes et lignes alternées d'un tableau numpy 2D

J'ai un problème où j'ai besoin de supprimer les colonnes et les lignes alternées d'un tableau numpy 2D.

J'ai essayé d'utiliser numpy.delete pour le faire mais les résultats ne sont pas ce que je veux...

for x in range(rows):
    if x %2 ==0:
        array_np=np.delete(array_np,1,axis=1)
for y in range(columns):
    if y %2 ==0:
        array_np=np.delete(array_np,1,axis=0) 

par exemple.

[[1,2,3,4],

 [5,6,7,8],

 [9,10,11,12],

 [13,14,15,16]]

sortie attendue:

[[1,3],

 [9,11]]

Le tableau est beaucoup plus grand que cela, mais l'idée est la même.

1voto

mucka Points 503

Vous pouvez essayer de générer une liste de nombres impairs en utilisant list(range(1, array.shape[0], 2)), puis vous pouvez construire la liste de toutes les colonnes que vous devez supprimer.

a = np.array([[1,2,3,4],
...  [5,6,7,8],
...  [9,10,11,12],
...  [13,14,15,16]])
>>> np.delete(a, range(1, a.shape[0], 2), axis=0)
array([[ 1,  2,  3,  4],
       [ 9, 10, 11, 12]])
>>> np.delete(a, range(1, a.shape[1], 2), axis=1)
array([[ 1,  3],
       [ 5,  7],
       [ 9, 11],
       [13, 15]])

Si vous combinez les deux, vous devriez obtenir ce que je comprends que vous voulez.

1voto

overfit Points 158
import numpy as np

arr_np = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16]])

arr_all_odd=np.delete(arr_np, list(range(1, arr_np.shape[0], 2)), axis=1)
arr_odd_odd=np.delete(arr_all_odd, list(range(1, arr_np.shape[1], 2)), axis=0)

print(arr_odd_odd)

Résultat:

[[ 1  3]
 [ 9 11]]

Vous pouvez également créer arr_odd_even, arr_even_odd, ou arr_even_even de la même manière.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X