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

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

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

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

Q&A

解決済

2回答

873閲覧

python: 演算子の使い方に関して

Lily1007

総合スコア10

Python

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

0グッド

1クリップ

投稿2021/03/22 15:07

編集2021/03/22 15:21

前提・実現したいこと

別の方から頂いたコードに、よく分からない演算子の使い方をしておりました。以下、該当する定義文を添付いたします。

python

1def dx_wrap(dx,box): 2 #wraps to account for period boundary conditions. This mutates the original entry 3 idx = dx > +box/2.0 4 dx[idx] -= box 5 idx = dx < -box/2.0 6 dx[idx] += box 7 return dx

どうやらboxという大きさの領域に周期的境界条件を課すような定義関数のようですが,2点質問がございます。
①一文に =と>が混在しておりますが、これはどういう解釈をすればよろしいでしょうか?文字を=にて代入する際に不等号を用いていることがよく分かりません。(不等号は今までif文等の条件を課す際に用いる印象があったため)また、その表記法の名前とうございましたら教えて頂きたいです。
② 4行目でidx = dxとidxとdxは同じ次元を持つ変数と思っておりますが、5行目でdx[idx]となっております。この表記は4行目と矛盾しないのでしょうか。

よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

①一文に =と>が混在

pythonでは=は代入文を表す記号で演算子ではありません。
idx = dx > +box/2.0 は idx に dx > +box/2.0 を代入するという意味です。

7.2. 代入文をご覧ください。

② 4行目でidx = dxとidxとdxは同じ次元を持つ変数と思っておりますが

pythonでは変数は次元を持ちません。

5行目でdx[idx]となっております。この表記は4行目と矛盾しないのでしょうか。

dxにバインドされているオブジェクトが何であるかによります。

このプログラムの場合は、dxにバインドされているオブジェクトが浮動小数型あるいは整数型のnumpyのndarrayで、boxにバインドされているオブジェクトが浮動小数あるいは整数であれば問題なく動きます。
その場合、idxにバインドされているオブジェクトはdxと同じshapeを持つブール型のndarrayになり、dx[idx]はidxのTrue要素の数を持つ浮動小数型の1次元ndarrayとなります。
dx[idx]はdxのviewですので、dx[idx]への代入はdxの要素を変更します。

以上の説明がわからない場合は、以下の資料をお読みください。

4.2. 名前づけと束縛

numpy.ndarray

numpy.ndarray.view

投稿2021/03/22 16:19

ppaul

総合スコア24666

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

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

0

ベストアンサー

a = b + c の意味はわかりますか?それと同じ構造なのですが。
a = b > c

#追記
上記が理解できたとして、
idx = dx > +box/2.0で、idxには、TrueFalseが入ります。
次のdx[idx] -= boxでは、その真偽値が添え字として使われていますが、リストの添え字の部分でTrue1False0として扱われます。
つまり、上記2文は、

Pytho

1if dx > +box/2.0: 2 dx[1] -= box 3else: 4 dx[0] -= box

ということです。

投稿2021/03/22 15:17

編集2021/03/23 06:17
otn

総合スコア84800

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

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

Lily1007

2021/03/23 06:23

つまり,idx = dx > +box/2.0 dx[idx] -= box idx = dx < -box/2.0 dx[idx] += box と4文で表現する際にはidxはどちらも1として扱われているということでしょうか?
otn

2021/03/23 06:27

不等号による比較が真なら1だし、偽なら0です。 そういう質問が出ると言うことは、回答が理解できなかったということですね。 どの部分が理解できて、どの部分が理解できないのでしょうか? まず、 > 上記が理解できたとして、idx = dx > +box/2.0で、idxには、TrueかFalseが入ります。 の理解は大丈夫でしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問