Si je veux filtrer une matrice numpue basée sur des conditions de valeur, je peux faire:
arr = np.array([1], [2, 2], [3, 3, 3], [4, 4, 4, 4]) filtered = arr[len(arr) > 2] # this does not output the desired [[3, 3, 3], [4, 4, 4, 4]], but rather [arr]
3 Réponses :
Vous pouvez vous vectoriser la fonction len code> et l'utiliser sur n'importe quel tableau souhaité: In [29]: vv = np.vectorize(lambda x: len(x)>2)
In [30]: arr[vv(arr)]
Out[30]: array([list([3, 3, 3]), list([4, 4, 4, 4])], dtype=object)
In [31]: %timeit arr[vv(arr)]
31.6 µs ± 385 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [32]: vv = np.vectorize(len)
In [33]: %timeit arr[vv(arr)>2]
35 µs ± 578 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
Vous allez ici:
In [7]: import numpy as np In [8]: arr = np.array([[1], [2, 2], [3, 3, 3], [4, 4, 4, 4]]) In [9]: check = np.vectorize(lambda element : len(element) > 2) In [10]: arr[check(arr)] Out[10]: array([list([3, 3, 3]), list([4, 4, 4, 4])], dtype=object)
Votre exemple produit une erreur: Avez-vous l'intention de produire un graphique d'objet DTYPE: p> (Cet avertissement futur est Produits par 1.19Dev.) P> Pour la plupart des fins, un tableau DTYPE Object ressemble plus à une liste qu'un tableau numérique. Ainsi, nous pourrions utiliser une compréhension de la liste pour trouver les listes plus longues: p> === p> autres ont suggéré np.vectoriser code >. C'est plus lent. P> In [148]: %%timeit alist=arr.tolist()
...: [a for a in alist if len(a)>2]
626 ns ± 2.41 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)