Python3

Numpy で行列を対角化する際の精度

要点だけまとめると,

  1. ユーザーが numpy.linalg.eig の精度を調整するのは難しそう
  2. 自分の問題の場合は「行列サイズが大きいくても,扱っている行列がエルミート行列なら,eig でなく eigh を使えば精度良く求まるよ」ということで解決できた

となります.

np.linalg.eig を使った際の精度の問題点

行列の対角化を使っていろんなことをやっている最中に遭遇した問題だが,行列の大きさが16X16ぐらいになったときに numpy.linalg.eig で対角化した際に,固有値と固有ベクトルの精度が悪くなるのが確認された.

解決策の模索

何とか解決しようと,numpy.lialg.eig がどのような仕組みで対角化していて誤差が生じたのか原因を特定しようと思った.




続きを読む

Python の Tips(1)

偉そうに”Tips”とか書いていますが,ただ自分がつまづいたところのメモ.ブログってそんなもんじゃないの…




続きを読む

Kivy 超入門(4):ボタンを作成する,ウィジェットの作成

忙しくて少し時間があいてしまいましたが,前回に引き続き Kivy のチュートリアルを載せていきたいと思います.これまで習った内容は次に書いてある投稿達になります.

Kivy 超入門(1):インストールからHello, World! まで
Kivy 超入門(2):ウィンドウのレイアウト,入力フォーム
Kivy 超入門(3):レイアウトを簡単に調整する(kvファイル)

これまでは主に Label という機能を使い文字を表示することをメインとしてきました.これはただ文字を表示するだけの機能でしたね.しかし,これまでの知識だけを用いて作れるアプリは,ただ与えられた文字を表示するだけのものになります.これでは GUI アプリを作成したいというのに,ただの連絡帳しか作れません...ということで今回は,タイトルにあるとおり,クリックできるボタンを作ってみましょう.ちなみに,今までは Label, TextInputの2つのウィジェットを使えるようになったので,これで3つ目ですね.

注意していただきたいのは,「ボタンを作成する」ことがこの投稿での目標でして,「ボタンを押すと,コレコレこういうことをできるようにする」ではないです.ボタンを押したときの操作(反応)の設定はもっとのちほどになるので,悪しからず...「その機能が知りたいんだが」という方は,こちらのYoutubeへのリンクに進んでいただくと「ボタンを押すと画面を切り替える」という機能を作ることをしていますので,見ていただくとよろしいかと思います.あくまでも自分はこのシリーズでチュートリアル的に順番にやっているので,このような内容を先取りすることはせずに進めていこうと思います.




続きを読む

Kivy 超入門(3):レイアウトを簡単に調整する(kvファイル)

前回までの投稿でお分かりかと思いますが,純粋なpythonの指示だけでkivyのクラスを使いこなすことになると,アプリを作成した際に大きいシステムになるととてもpythonプログラムになってしまいます.これの問題を解消してくれるのが kv ファイルです.どんな仕組みかを大雑把に説明すると,pythonのプログラムファイルのほかにkvファイルというものを(シンプルに)書き,そのkvファイルをpythonから読みむという形になります.

もちろんPythonのプログラムの中でkivyのクラスを使いこなしてプログラムしてもよいのですが,どういうやり方でやるかは状況,環境,個人の哲学などにに強く依存するので,kivyを学ぶ際に知っておいて損はないと思います.実際に書いてみると,同じプログラムでもわかりやすく書けます.

ということで,今回は kvファイルを用いて,Hello, World! を表示させるプログラムを作ってみます.Hellow World! が不安な方は筆者の書いた「Kivy 超入門(1):インストールからHello, World! まで」をまずは見てください(ステマといいたいが,「ステマと言いたいが」と書いたことでもはやステマではない.めでたしめでたし).




続きを読む

Kivy 超入門(2):ウィンドウのレイアウト,入力フォーム

前回に引き続き,Harrison Kinsley さんのkivyの解説を日本語の文章にして,補足を加えながら説明していきたいと思います.今回はウィジェットとラベル,という内容でして,最終的にはログイン画面をつくることが目標です.ログインシステムでなくログイン画面です.その際にレイアウトと入力フォームというGUIアプリの必須知識を身に着けれます.

前もって気づいておけばよかったこととして,kivy をスムーズに理解するためには「クラスの継承」という知識を理解しているととてもスムーズになるのかと思います.筆者はクラスの継承をそこまで活用したことがなかったのですが,今回の投稿を書きながら勉強させていただきました.なので,クラスの継承の部分の説明が”弱い”かと思われますが,ご了承いただきたいです...




続きを読む

Python3 超入門(4):条件分岐(if文),標準入力

この投稿では2つの大事な内容を扱いと思っています.1つは条件分岐文というもので,for文に並んでプログラミングでかなり大事になってくるパーツです.名前から大体機能の予想はつくかと思いますが,「もしAならBをしてください」のような指示です.もう一つは標準入力です.プログラムであらかじめすべてを決めておくのでなく,実行した後に何かを自分で入力したいときがあります.例えば「入力した数に3をかけてその数字を出力しなさい」のようなプログラムを考えると,「入力した数」はプログラムを作成する際に決まっていない場合も考えられます.

また,前回の投稿までの知識では言語処理100本ノック 2015の一章の問題は全部解けないかと思います.このの投稿の最後で,それを解く際に助けになろうであろう知識を羅列していこうと思います,あくまでもpythonの基礎的使い方がメインです




続きを読む

Numpy を用いた行列演算の基礎(対角化まで)

筆者が初めてnumpyで行列についていくつか処理をする際に学んだことを,こちらにまとめておきたいと思います.対角化を目標にはしていますが対角化は後半にあり,内容のほとんどは行列に関する基本的な処理ですので,初めてnumpyで行列処理をする方にも理解できるよう心がけたつもりです...




続きを読む

Python3 超入門(3):文章の処理の基礎,辞書,集合

鋭い方に「何をもって基礎的と言ってんだ」と突っ込まれそうですが,ここでは「言語処理100本ノック 2015の1章をを自力で解けるような文字列処理の知識を身に着ける」という意味で「基礎的な」という表現を使わさせていただいています.

なので,今回の投稿は言語処理100本ノック 2015の1章を解くことを強く意識した投稿になります.




続きを読む

Python3 超入門(2):反復処理,リスト

前回に引き続き,Pythono3 の基本的な使い方を説明していきます.今回は反復処理に焦点を当てます.

プログラムを用いる利点として,人力では計算できないものを(近似的に)行ってくれる(数値計算),似たような作業を何回も自動的に繰り返してくれる(反復処理,自動化)などが考えられます.後者の利点を最大限に利用するために,反復処理を理解していきましょう.




続きを読む