🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

575閲覧

if in 行列の条件を不等式にする方法。

退会済みユーザー

退会済みユーザー

総合スコア0

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/02/20 16:48

imgが三次の正方行列で、

0.5 0.5 0.5
0.5 0.5 0.5
0 0 0

の時、

python

1if 0.5 in img[1]: 2 print("0.5なのでtrueです。")

は、trueとなりますが、

条件に不等式を使うにはどうすれば良いのでしょう?

python

1if x>0 in img[1]: 2 print("0.5なのでtrueです。")

等としても、trueになりません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

「どれか一つでも正であれば」でしょうか?

Python

1if any( x > 0 for x in img[1]):

投稿2021/02/20 17:29

otn

総合スコア85886

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/02/20 20:55 編集

これもできているかも知れません。 今取り上げているのは3列の行列ですが、 各列の値の条件を変えるにはどうすればよいのでしょうか? 左側0.5、真ん中0.4以上、右0.6以下、等という風に。
otn

2021/02/21 04:35

「どれか1つ条件を満たす」であれば、 if img[1][0]==0.5 or img[1][1]>=0.4 or img[1][2]<=0.6:
退会済みユーザー

退会済みユーザー

2021/02/21 08:21

if img[1][0]==0.5 or img[1][1]>=0.4 or img[1][2]<=0.6: print(img[1][0]) とすると、 if img[1][0]==0.5 or img[1][1]>=0.4 or img[1][2]<=0.6: の部分に波線が引かれ、 ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() と表示されます、 if ()とかif all()とかif a.all()とかにしてみましたが、やはりエラーです、どうすれば良いのでしょうか。
otn

2021/02/21 08:38

imgの次元数が2じゃないのでしょう。条件を良く考え直しましょう。
退会済みユーザー

退会済みユーザー

2021/02/21 09:17

あれ・・でも if any( x > 0.49 for x in img[0][0]): print(img[0][0]) は何のエラーもなく、問題なく出力されるのですが・・・。
otn

2021/02/21 09:39

ということは、imgは3次元ですね。 if img[0][0][0]==0.5 or img[0][0][1]>=0.4 or img[0][0][2]<=0.6: と、添え字を3つ指定しましょう。 条件を良く考え直しましょう。
退会済みユーザー

退会済みユーザー

2021/02/21 10:06

画像の全てピクセルRGB情報を入力して、 その後axis=1を取っているのですが、 これは「各RGB情報」を条件に考えているため、3つ必要なんですかね、なんかこんがらかってきます。
guest

0

繰り返し処理であるforを使ってください。

サンプルコードを置いておきます(オンラインで実行できるコード)。

python

1for element in img[1]: # img[1]の全ての要素を1つずつ変数elementに代入しながらループする 2 if element > 0: # elementが0より大きいか確認する 3 print("0.5なのでtrueです。") # 0より大きいものが1つでもあれば、メッセージを出力する 4 break # ループを抜ける

※ 2021/02/21 9:06 追記

これ、今取り上げているのは3列の行列ですが、

各列の値の条件を変えるにはどうすればよいのでしょうか?
左側0.5、真ん中0.4以上、右0.6以下、等という風に。

行列のそれぞれの要素を別々にチェックすると良いと思います。
サンプルコード

python

1for line in img: 2 if line[0] == 0.5: 3 print('左側は0.5です') 4 if line[1] >= 0.4: 5 print('真ん中は0.4以上です') 6 if line[2] <= 0.6: 7 print('右は0.6以下です')

補足ですが、行列(list)の(i, j)成分の要素にアクセスする場合は、img[i][j]というように書きます。
例えば、

img = [ [0, 1, 2], [3, 4, 5], [6, 7, 8], ]

という行列(list)があった場合、img[0][0]は0, img[1][0]は3, img[2][3]は5になります。

不明点や疑問点などがあればお気軽にお聞きください。

投稿2021/02/20 16:54

編集2021/02/21 00:19
task4233

総合スコア106

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/02/20 17:23

forを使う必要があるのですね。 これ、今取り上げているのは3列の行列ですが、 各列の値の条件を変えるにはどうすればよいのでしょうか? 左側0.5、真ん中0.4以上、右0.6以下、等という風に。
task4233

2021/02/21 00:38

追記しました。
退会済みユーザー

退会済みユーザー

2021/02/21 05:46

forを使うとそんな感じですね、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問