2017-10-10 17 views
0

Je comprends que c'est une question de base et aura probablement déjà été répondu avant, mais je ne peux pas trouver une solution exacte après avoir cherché un petit tout alors je voudrais demander.TypeError sur np.where en utilisant une liste en annexe

Je crée une boucle qui convertit le temps écoulé en une onde sinusoïdale, puis la trace. Je n'ai aucun problème avec cette partie mais je me bats avec un peu d'analyse après.

import time 
import numpy as np 

x = [] 
y = [] 

start = time.time() 

for times in range(100): 

    stop = time.time() 
    duration = stop-start 
    x.append(duration) 
    y.append(np.sin(duration)) 

    time.sleep(0.05) 

Tout cela fonctionne très bien et produit un graphique selon les besoins, mais je suis à la recherche puis d'utiliser la commande np.where et renvoie une erreur:

print(y[np.where(y > 0)]) 

TypeError: unorderable types: list() > int()

Ce qui me brouille est ce time.time() renvoie une valeur que j'ai ensuite ajouter à la matrice, si j'appelle type(y[0]), il donne une définition numpy.float. Je comprends que je dois juste appeler une mauvaise fonction ou faire quelque chose de mal avec ma définition de la liste! Comme si je faisais la même chose avec une simple matrice int, tout fonctionne bien.

a = np.arange(0,100,2) 
print(a[np.where(a > 80)]) 

[82 84 86 88 90 92 94 96 98]

Ce qui est très bien, donc je me demande où je suis allé mal sur mes définitions de liste pour la TypeError.

Bravo à l'avance!

+0

Avez-vous essayé de transformer votre liste 'x' en un tableau' numpy' en utilisant 'np.array (x)'? Est-ce que ça produit la même erreur? –

+0

Cela résout, merci beaucoup. Pourriez-vous m'expliquer ce que cela change et comment cela permet à la fonction de fonctionner? À votre santé. – Wrothschild

+1

Numpy remplace les opérateurs de base pour l'égalité, la comparaison, etc. Dans ce cas, l'appel de l'opérateur '>' est identique à l'appel de [numpy.greater] (https://docs.scipy.org/doc/numpy-1.13.0/reference /generated/numpy.greater.html). –

Répondre

0

Coulée y dans un tableau numpy y = np.array(y) puis utilisez np.where(y[np.where(y > 0)]) pour obtenir les résultats que vous recherchez.

+0

Ça marche, merci beaucoup. Y a-t-il une chance que vous puissiez expliquer ce qu'il change pour le faciliter? À votre santé. – Wrothschild

+0

Selon la documentation ([link] (https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.where.html)) 'np.where()' nécessite une condition de type tableau et n'accepte pas les listes. – nanoPhD

+0

Intéressant, merci beaucoup. – Wrothschild