Pour vérifier l'entrée de l'utilisateur, j'essaie de voir que l'entrée comprend uniquement une liste de nombres. L'entrée est un tableau 100x100 avec les nombres -1,0 et 1. Et maintenant j'essaye avec une instruction if pour vérifier si ce tableau comprend uniquement les nombres ci-dessus.

if np.all(Array) == (-1,0,1):
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

J'ai aussi essayé:

if np.any(Array) == -1 and np.any(Array) == 0 and np.any(Array) == 1:

if np.all(Array) == -1 and 0 and 1:

Mais rien n'a fonctionné ...

1
Marnickcle 1 avril 2017 à 12:52

2 réponses

Meilleure réponse

Peut-être que vous pouvez essayer de transformer le array en set:

import numpy as np

x=np.array([[-1,0,-1],[1,1,1]])
if set(x.flatten())=={1,0,-1}:
    print "yes"

Ou utilisez la méthode unique() pour trouver les éléments uniques d'un tableau:

if set(np.unique(x))=={1,0,-1}:
    print "yes"
0
McGrady 1 avril 2017 à 10:04

Vous pouvez utiliser numpy.unique pour obtenir un tableau trié des éléments uniques du tableau.

Essayez ce qui suit:

import numpy as np
a = np.array([[1,1],[0,1],[1,-1]]

def foo(a):
  lst = [-1,0,1]
  if isinstance(np.unique(a) == lst, bool) and not(np.unique(a) == lst):
    return False
  elif np.all(np.unique(a) == lst) == True:
    return True

print foo(a) ##prints True because the array 3x3 array 'a' only contains the elements -1,0,1

Remarque: la comparaison des 2 tableaux retourne False si tous les éléments ne sont pas égaux et renvoie un tableau de 3 éléments 'True' si tous les éléments sont vrais, nous devons donc utiliser np.all pour nous assurer que les 3 éléments renvoyés par le la comparaison d'égalité est vraie

0
Priyanshu Singh 1 avril 2017 à 10:57