2017-04-01 13 views
1

ユーザの入力を確認するために、入力の数字だけが表示されているのを確認しようとしています。入力は、数字が-1,0と1の100x100配列です。そして今、私はこの配列に上記の数字だけが含まれているかどうかを調べるif文を試しています。Python配列に数字の集合リストのみが含まれているかどうかを調べる

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() 

私も試してみました:

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

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

が、何も働いていた...

答えて

0

をたぶんあなたはsetarrayをオンにしようとすることができます:

import numpy as np 

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

またはunique()メソッドを使用しますアレイのユニークな要素を検索する。:

if set(np.unique(x))=={1,0,-1}: 
    print "yes" 
+0

これはうまくいきました。ありがとうございました! – Marnickcle

0

numpy.uniqueを使用すると、配列内の一意の要素のソート済み配列を取得できます。

次のことを試してみてください。

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 

注:すべての要素が等しくないと、すべての要素に該当する場合、3「真」要素の配列を返します、したがって、私たちが必要な場合は、2つの配列を比較することはFalseを返しますnp.allを使用して等価比較によって返される3つの要素がすべて真であることを確認する

+0

はい、これはうまくいきました。ご協力いただき誠にありがとうございます! – Marnickcle

+0

うれしかったです。答えを受け入れてください! –

関連する問題