2016-10-31 3 views
1

Existe-t-il un moyen de faire plusieurs index dans un tableau numpy comme décrit ci-dessous?Indices multiples pour un tableau numpy: IndexError: impossible de forcer l'entrée de tranche de type numpy.ndarray en nombre entier

arr=np.array([55, 2, 3, 4, 5, 6, 7, 8, 9]) 
arr[np.arange(0,2):np.arange(5,7)] 

output: 
IndexError: too many indices for array 

Desired output: 
array([55,2,3,4,5],[2,3,4,5,6]) 

Ce problème pourrait être semblable à calculer une moyenne mobile sur un tableau (mais je veux le faire sans aucune fonction qui est fournie).

+0

Voulez-vous quelque chose comme 'np.vstack ((arr [np.arange (0, 6)], arr [np.arange (1, 7)])) '? – mgilson

+0

Oui ce serait la sortie, mais le raccourci ne compte pas comme dans le monde réel arr contiendra des données qui ne peuvent pas être reproduites avec un np.arrange. J'ai changé la question pour la clarifier. – Nickpick

+0

Je ne sais pas comment 'np.arange (0,2)' se rapporte à votre sortie désirée? – njzk2

Répondre

1

Voilà une approche utilisant strides -

start_index = np.arange(0,2) 
L = 5  # Interval length 
n = arr.strides[0] 
strided = np.lib.stride_tricks.as_strided 
out = strided(arr[start_index[0]:],shape=(len(start_index),L),strides=(n,n)) 

run échantillon -

In [976]: arr 
Out[976]: array([55, 52, 13, 64, 25, 76, 47, 18, 69, 88]) 

In [977]: start_index 
Out[977]: array([2, 3, 4]) 

In [978]: L = 5 

In [979]: out 
Out[979]: 
array([[13, 64, 25, 76, 47], 
     [64, 25, 76, 47, 18], 
     [25, 76, 47, 18, 69]]) 
+0

Pouvez-vous préciser si pour n = arr.strides [0] vous prenez toujours l'élément [0] ou s'il peut y avoir une différence selon la dimension de la foulée? – Nickpick

+0

@nickpick Bien arr.strides nous donne un tuple de foulées le long de tous les dims. Puisque nous travaillons avec un tableau 1D, nous avons juste besoin des pas le long du premier axe, donc nous obtenons le premier élément de ce tuple avec '[0]'. Si cela répond à votre question? – Divakar

+1

@nickpick Voir ici un exemple d'utilisation de foulées bidimensionnelles - http://stackoverflow.com/a/40367540/3293881 – Divakar