Je suis un débutant avec numpy et j'essaie d'extraire des données d'un tableau numpy long. Ce que je dois faire est de commencer à partir d'une position définie dans mon tableau, puis de sous-échantillonner tous les nièmes points de données à partir de cette position, jusqu'à la fin de mon tableau.
fondamentalement si j'avais
a = [1,2,3,4,1,2,3,4,1,2,3,4....]
Je veux sous-échantillonner ceci pour commencer à a[1]
puis échantillonnez chaque quatrième point à partir de là pour produire quelque chose comme
b = [2,2,2.....]
Vous pouvez utiliser numpy slicing , simplement start:stop:step
.
>>> xs
array([1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4])
>>> xs[1::4]
array([2, 2, 2])
Cela crée une vue des données d'origine, donc c'est un temps constant . Cela reflètera également les modifications apportées au tableau d'origine et conservera l'intégralité du tableau d'origine en mémoire:
>>> a
array([1, 2, 3, 4, 5])
>>> b = a[::2] # O(1), constant time
>>> b[:] = 0 # modifying the view changes original array
>>> a # original array is modified
array([0, 2, 0, 4, 0])
donc si l’un des problèmes ci-dessus pose un problème, vous pouvez en faire une copie de manière explicite:
>>> a
array([1, 2, 3, 4, 5])
>>> b = a[::2].copy() # explicit copy, O(n)
>>> b[:] = 0 # modifying the copy
>>> a # original is intact
array([1, 2, 3, 4, 5])
Ce n'est pas un temps constant, mais le résultat n'est pas lié au tableau d'origine. La copie est également contiguë en mémoire, ce qui peut accélérer certaines opérations.