【第2回Python流体の数値計算】Numpyの使い方を確認する。C++PythonFortran技術士サポートサイトお問い合わせPython【第2回Python流体の数値計算】Numpyの使い方を確認する。2021年10月16日こんにちは(@t_kun_kamakiri)。基本的な内容はこちらのサイトにそってやっていきます。この記事ではこんな人を対象にしています。☟前回の記事がまだの人はこちらから(※Pythonの環境構築ができている方は必要ありません)前回の記事はこちら【第1回Python流体の数値計算】目標と環境構築。ここからはじめよう!前回の記事で環境構築についてはオッケーだと思うので、今回からPythonを使って具体的な数値計算を実践していきたいと思います。偏微分方程式を解こうとすると、数値計算の離散化手法でつまづきそうなのでまずは、Pythonのライブラリであるnumpyの使い方を確認するところから始めましょう。カマキリちょっとずつ進んでいきます。Colaboratoryを使ってnumpyの使い方を見ていきましょう。要素数)numpy.arange(始め,終わり,分割幅)リスト型とnumpy.ndarrayの違いリスト型をnumpy.ndarryにするnumpy.array(リスト)numpy.ndarryの要素を抽出する要素を1つ抽出する複数の要素を抽出する最後から何番目の要素からという指定もできる最後から複数の要素も抽出するまとめPythonの完全初心者は書籍で学ぶとよいNumpyは数値演算をするためのライブラリまずは、簡単にNumpyの使い方を確認しておきましょう。今やネット上に日本語で多くの情報があるので調べればすぐに使い方を知ることができます。一応Numpyについての公式ページがあるのでそちらを参考にしてください。Numpy公式ページNumpyの基本的な使い方numpyを使うには、「numpyを使いますよ」という宣言をする必要があります。numpynumpy自身もPythonで書かれたプログラムのライブラリなので、プログラムの実態はどこかにあるはずです。numpyはどこにあるのかというと以下で調べることができます。Python/usr/local/lib/python3.6/dist-packages/numpy/__init__.py1/usr/local/lib/python3.6/dist-packages/numpy/__init__.py使用環境によって、どこにnumpyの本体が保存されているかが変わりますので混乱無きようお願いします。ここからnumpyを使ってちょっと遊んでみましょう。一度numpyを勉強したことがある方は、復習程度に見ていただければと思います。numpy」でnumpyをインポートして、numpy.変数名とすることでnumpyの中の変数を呼び出すことができます。numpy.piprint(x)【結果】Python3.14159265358979313.141592653589793このように変数を呼び出す場合は、()括弧がいらないのですが、次で見るように関数を呼び出す場合は()括弧が必要です。関数を呼び出す呼び出す関数は何でも良いのですが、numpyで用意されている「sin関数」を呼び出してみます。関数を呼び出す場合は()括弧が必要です。引数として値を入れたり入れなかったりしますが、ここでは「sin関数」には値\(x\)を引数にしています。1.2246467991473532e-16123.1415926535897931.2246467991473532e-16「\(\sin(\pi)=0\)」なので「0(限りなく0に近い)」という値が返ってきました。限りなく0に近いのですが、float型だと16~17桁までの範囲しか扱えないので「1.2246467991473532e-16」は誤差の範囲です。こんな感じでnumpyを使えばめっちゃ楽に数値計算のためのライブラリが使えます。毎回、「numpy.pi」などと「numpy」と書くのはめんどう正直毎回、「numpy」と書くのは面倒なので慣例で「np」と書いて省略して使うことにします。np」とするだけです。1.2246467991473532e-16123.1415926535897931.2246467991473532e-16これでも先ほどと同じ結果を得られるわけです。numpyについて見ていきます。数値計算で空間領域を要素に分割する必要がありますが、numPyで等間隔の配列ndarrayを生成する主要な方法として次の2つを覚えておけば良いでしょう。要素数)空間領域の「始め」と「終わり」を指定して、それを何個の要素を生成するかを指定するだけで良いです。'numpy.ndarray'>numpy.arange(始め,終わり,分割幅)空間領域の「始め」と「終わり」を指定して、それをどれくらいの幅で要素を生成するかを指定するだけで良いです。'numpy.ndarray'>リスト型とnumpy.ndarrayの違いnumpy.linspace()とnumpy.arange()は、ともに「numpy.ndarray」というデータ型になっています。出力結果だけを見るとリスト型のようになっていますが、リスト型との違いたとえばこちらの記事を参考にしてもらえればと思います。ここでは、数値計算をする上でとても重要となる違いだけを紹介しておきます。5]このように「list_1」の要素に「list_2」が追加されただけであることがわかります。数値計算の際には、\(\boldsymbol{u}_{i}=(u_i,u_j)\)と\(\boldsymbol{u}_{i-1}=(u_{i-1},u_{j-1})\)の足し算は直感的にも\(\boldsymbol{u}_{i}+\boldsymbol{u}_{i-1}=(u_i+u_{i-1},u_ju_{j-1})\)としてほしいのですが、リスト型だと上手くいっていません。これがndarrayだと☟こうなります。]各要素ごとに足し算された結果になっているのがわかりますね。実に直感的に、演算が行えます。このように配列の要素ごとで演算が簡単に行えるのでとても便利ですね。その他numpyには「行列計算」など簡単に行えるメソッドが用意されているのですが、今回の流体の数値計算には使わないので紹介記事を載せる程度にしておきます。あわせて読みたい【Python初心者】Numpyを使って行列計算の使い方をまとめる。リスト型をnumpy.ndarryにするnumpy.array(リスト)用意されているデータがリスト型であったとしても、それをnumpy.ndarryに変換することは簡単にできます。数値計算のためには、numpyを使って計算した方が計算が速いので必ずnumpy.ndarryとして取り扱うようにします。'numpy.ndarray'>データの型を見ると「リスト型」から「numpy.ndarry」に変換されているのが確認できますね。[0,1,2,3,4,5])と書いても良いです。numpy.ndarryの要素を抽出するnumpy.ndarryで作成したデータの各要素を取り出したい場合についても確認しておきましょう。以下のようなデータを用意しておきます。9]一応、復習のために「np.linspace」と「np.arange」を使ってみます。このデータから各要素を抽出してみます。要素を1つ抽出する要素を1つ抽出する場合は「index」を指定することで、indexに対応する要素をひとつ抽出することができます。3.012340.01.02.03.0※indexは「0」からスタートしていることに注意しましょう。複数の要素を抽出する複数の要素抽出する場合は以下のように記述します。9.]このように、x[1:3]と書けばindex「1から3より前まで」要素を抽出することができます。「3まで」ではなくて「3より前まで」なので、実際にはindexは「1,2」を選択して要素の値を抽出しているという点に注意する必要があります。全ての要素を抽出したい場合はx[:]と書くことで、値を全て抽出できます。81298こんな感じで最後から何番目の要素か・・・という指定もできます。最後から複数の要素も抽出できるのでそれを最後に見てみます。7]注意する点といえば、x[:-2]と書けばindex「最後から2番目より前」の要素を抽出することができます。「最後から2まから前の要素」ではなくて「最後から2番目より前まで」なので、実際にはindexは「0,1,2,3,4,5,6,7」を選択して要素の値を抽出しているという点に注意する必要があります。まとめ今回はnumpyの基本的な使い方について解説しました。numpy.linspace()numpy.arange()この2つは数値計算の空間データを作成する際に必ず使うので覚えておきましょう(^^)/色々なPythonのライブラリの機能を学びすぎても、使わなければ忘れてしまうので最低限学ぶとしたらこれくらいだろうというものを本記事にまとめました。Pythonの完全初心者は書籍で学ぶとよいPython自体が不安だという方は、こちらの書籍から勉強しても良いかも知れません。☟こちらの本がPython初心者が挫折することなく勉強できる本です。04:45時点)Amazon楽天市場YahooAmazonの情報を掲載しています僕自身もこの書籍ではじめは勉強しました。小難しい余計なことが書いていないし、年末の一週間くらいで読むことができたので、初心者の方にはとてもお勧めです。lab)を使ってnumpyを勉強するならこちらの参考書がおすすめです。lab)を使っても同じです。し」と「値渡し」の違いを理解する。kamakiri宇宙に入ったカマキリPython【第4回Python流体の数値計算】1次元移流方程式を差分法で実装する。kamakiri宇宙に入ったカマキリPython【第14回Python流体の数値計算】2次元ラプラス方程式をPythonで実装する。関数の基本を理解しよう。コメントをキャンセルメールアドレスが公開されることはありません。付いている欄は必須項目です【第1回Python流体の数値計算】目標と環境構築。し」と「値渡し」の違いを理解...製造業コミュニティ製造業コミュニティは製造業で働く方や製造業へ就職を考えている学生の方が匿名で気軽に情報交換を出来るオンラインコミュニティです。本が聴けるアプリAudible(オーディブル)☟30日間の無料体験(最初の1冊は無料)プロフィールカマキリ(^^)大学の専攻は物性理論で、Fortranを使って数値計算をしていました。CAEを用いた流体解析は興味がありOpenFOAMを使って勉強しています。CAE解析(流体解析)notenoteで内容は主に「プログラミング言語」の勉強の進捗を書いています。「現在勉強中の内容」「日々思ったこと」も日記代わりに書き記しています。1DCAEの操作方法などを動画にしています。(音声はありません_(._.)_)製造業コミュニティをやっています。Facebookを使った実名登録。製造業ブロガーコミニティ案内オンライン家庭教師のご要望あればご連絡ください。Amazonのアソシエイトとして、当メディアは適格販売により収入を得ています。・当メディアはGoogleによるユーザーに合わせた自動広告が表示されます。Twitterカマキリ☟こちら日々の「思ったこと」「勉強している内容」を発信しています。4Pythonを使ってTwitterAPIで自作botを作りました。製造業コミュニティの方々と運営しています。botを作るのかを知りたい方はこちら。【超丁寧に解説】Pythonを使ってTwitterAPIでGoogleスプレッドシートに書いた内容を画像付きでツイート投稿する。HOMEPython【第2回Python流体の数値計算】Numpyの使い方を確認する。宇宙に入ったカマキリ。