質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python

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

Q&A

解決済

1回答

540閲覧

PythonでNumpyの多次元リストへの代入について

hideki.

総合スコア31

Python

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

0グッド

0クリップ

投稿2019/10/16 04:43

はじめまして。
Puthon初心者です。
以下の投稿のベストアンサー回答のコードの書き方について
分からないので教えて下さい。
https://teratail.com/questions/100301

LouiS0616様のコードの内容は画像中の赤を青に替えて、それ以外は
黒にするものです。

該当のソースコード

Pyton

1cond_p = (img[..., 0] == 0) & (img[..., 1] == 0) & (img[..., 2] == 255) 2cond_f = np.logical_not(cond_p) 3img[cond_p] = [255, 0, 0] 4img[cond_f] = [ 0, 0, 0]

分からないのは1行目の中の
img[...,0] == 0
の部分です。意味合いとしては3行目のリストへの値代入の条件、つまり
BGRのBlueは0ということを表していると想像してます。
ドット3個という書き方はどのような意味なのでしょうか?

それと3行目、4行目の式はAdvanced Indexingというものでしょうか?

参考にすべきWebサイト(日本語がありがたいです)教示などでも結構です。
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ドット3個という書き方はどのような意味なのでしょうか?

... は Python の組み込み定数 Ellipsis (日本語で省略という意味) を表します。

組み込み定数 — Python 3.7.5 ドキュメント

numpy ではスライス指定を省略するのに使われています。
例えば、a が (100, 100, 3) の配列であったとき、a[:, :, 1] とスライスする代わりに a[..., 1] と省略して記載できます。

それと3行目、4行目の式はAdvanced Indexingというものでしょうか?

numpy の機能の Advanced Indexing のうち、boolean indexing です。

コードの意味

# (B, G, R) = (0, 0, 255) つまり 赤のピクセルは True、そうでないピクセルは False の bool 配列を作成する。 cond_p = (img[..., 0] == 0) & (img[..., 1] == 0) & (img[..., 2] == 255) # not 演算なので、赤のピクセルは False、そうでないピクセルは True の bool 配列が作成される。 cond_f = np.logical_not(cond_p) # 赤のピクセルは (B, G, R) = (255, 0, 0) つまり 青 を代入 img[cond_p] = [255, 0, 0] # 赤のピクセル以外は (B, G, R) = (0, 0, 0) つまり 黒 を代入 img[cond_f] = [ 0, 0, 0]

参考文献

投稿2019/10/16 05:29

tiitoi

総合スコア21956

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

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

hideki.

2019/10/16 06:12

回答ありがとうございました。 Ellipsisというのですね。 検索ワードを色々試しましたが、自分で解決できなかったので助かりました。 Pythonに慣れていないのですぐにループ回したくなりますが、 こんな書き方ができるのは素晴らしいですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問