行列Aの全要素が-1の時に、print("HELLO")と出力したい場合は、
python
1if A[:] == -1: 2 print("HELLO")
とすればいいかなと思ったのですが、
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
というエラーが出ます。どうしたらよいでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
can110さん回答の前半部分は同意なのですが、コード中の最終行は勘違いを誘発する記述に思えるので補足させてください。
A.all(-1)は「Aの全ての要素が-1か」という意味ではありません。リファレンスを見てもあっさりしすぎていてnumpyの配列関連のメソッドに親しみがないと「なんのこっちゃ」になるかも知れません。(慣れてこないと意味が充分わからないので、例えばaxisという引数が一般的にどういう意味かを知らないといけません)
allやanyは「複数の真偽値を簡約するためのメソッド」です。ここまではcan110さん回答のとおりなのですが・・・
python
1>>> np.array([-1, -1]).all(-1) 2True 3>>> np.array([1, 1]).all(-1) 4True
こうなってしまいます。
allは「要素が真偽値である前提」のメソッドです。上に書いた両方の例がTrueになるのはPythonの真偽値の仕様「数値は0ならFalse、0以外ならTrue」に基づきます。
allの第一引数はaxisであり「比較する値」ではなく「どの軸にそって簡約するか」という意味のものです。axisを省略するかNoneを指定すると全ての軸に対して簡約するという意味になり、意味的には「全ての要素がTrueか」を調べることと同じになります。-1を指定すると「最後の軸に沿って簡約するという意味になります。
それゆえ「全ての要素が-1か」を判定するなら「あらかじめ各要素が-1と等しいか」を演算しておかなければなりません。つまり質問者さんが期待する判定は
(A == -1).all()
となります。こう書くとAがいかなる次元数(ランク)の配列でも「全要素が-1か」という意味になります。
投稿2018/12/07 02:35
総合スコア18392
0
ベストアンサー
A[:] == -1
の結果は複数の真偽値を持ちえます。
if 複数の真偽値:
ではどう判断していいか分からないので提示エラーが発生します。
よって以下のように.all
または.any
で判定条件を明確に与えてあげる必要があります。
Python
1import numpy as np 2A = np.array([-1,-1,-1]) 3print( A[:] == -1) # [ True True True] 4 5# どう判断したらいい?すべてTrue?いずれかTrue? 6#if A[:] == -1: 7# print('HELLO') 8 9# すべてが -1 10if (A == -1).all(): # 全要素について簡約して真偽値を判定 11 print('HELLO')
投稿2018/12/07 01:44
編集2018/12/07 02:42総合スコア38234
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
Use a.any() or a.all()
「どうしたらよいでしょうか」という質問に対してはすでに回答が出ています。エラー文を最後まで読みましょう。
気になる点
行列、ということは2次元配列またはnumpyによる行列表現でしょうか?
a.all()
が指定されているということはおそらくnumpyなのでしょうけど…。
上記の公式ドキュメントを参考にして実装してみてください。
投稿2018/12/07 01:29
総合スコア6753
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/22 07:41 編集
2018/12/07 01:54
2020/09/22 07:42 編集
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/07 02:44
2018/12/07 02:55