isatoの活動日記

管理人isatoが毎日の生活で気になったこと、勉強になったことを書いています。

pythonのimportの書き方

pythonでの外部ファイルの読み込みについてまとめます。オブジェクト指向の醍醐味ですね。

 

・同階層

同じディレクトリ内に

module.py

main.py

があるとき、main.py内で以下のように書けばmodule.pyを読み込むことができます。

 

import module

使うとき : module.関数名等

 

または

 

from module import 関数名等

使うとき : 関数名等

 

関数名等としているのはクラス名でもいいからです。深い意味はありません。

 

 

・モジュールが下の階層

上の例のmodule.pyが、main.pyと同じ階層にあるfileというディレクトリにある場合

 

import file.module

使うとき : file.module.関数名等

 

のように書きます。

file.moduleが長いなと思ったら以下のように書き換えます。

 

import file.module as name

使うとき : name.関数名等

 

同階層の場合のfromを使うことも可能です。

 

 

 

上の階層にある場合は次の機会に書きますね^ ^

 

ウラムの螺旋について

f:id:spark856:20190702183358p:image

 

この図をウラムの螺旋と言います。

 

ウラムという数学者が退屈な会議中に、数字を書いて遊んでいたところ偶然発見されたそうです。

 

ウラムの螺旋の書き方

 

f:id:spark856:20190702183624p:image

 

このように1を真ん中にして螺旋を描いていきます。そして、素数に色をつけると最初の画像のようになります。

 

明らかに直線ができており、規則性があるように見えます。不思議です。

 

実はウラムの螺旋に直線を引くと、その直線上の数は二次関数で表現できます。(個人的にはこの事実も同じくらい驚き)

 

そしてなんと、ウラムの螺旋にはオイラー素数生成多項式が含まれています!めちゃくちゃ面白いですね^ ^

 

オイラーさんも、もしかしたらこうやって見つけたのかも....

 

暇つぶしもバカにできないですね笑

 

 

pythonのファイル出力いろいろ

pythonのファイル出力のやり方は一通りではありません。

今回は使いやすい2パターンのやり方についてまとめます。

 

パターン1 withを使う。

 

with open(‘ファイル名',’w’) as f:

      f.write(‘書き込む文字列’)

 

この書き方では、wをrにすることでファイル入力も可能です。

 

パターン2 printの出力先をファイルにする。

 

print(‘書き込む文字列’,open=(‘ファイル名',’w’))

 

この書き方は、書き込み専用だと思われます。でも一行で書けていい感じですね!

 

意外と書こうと思ったら忘れてるのでまとめておきました^ ^

 

vimでの複数行インデント

コードを書いていて、後から一部を関数化したいときとかに複数行インデントしたくなることはよくありますね。

 

ということでvimでの複数行インデントについてまとめておきます。

 

1.コマンドモードで shift + v を押し、ラインビジュアルモードへ

2.インデントしたい行を選択

3.shift + > を2回押すとインデントされる

 

pythonとかだとこれ知ってないと結構きついと思います。笑

 

ぜひ覚えておきたいですね。

オイラーの素数生成式

x^2+x+41

っていうなんの変哲もない二次多項式なんですが、xに自然数を代入していくと信じられない確率で素数となります。

 

オイラーさんが見つけたのでオイラー素数生成式という名前がついています。

 

41という定数項を(3,5,11,17)に変えても同様の性質があることがわかっています。

 

オイラー素数生成式に関する情報をネットで集めると「高い確率で素数になってすごいね〜」って感じで終わってるのが多いです。

 

しかし、僕はそれだけはないと確信しています。

面白い発見もあったのでまた公開しますね!

 

深層強化学習の勉強1

深層強化学習とは、深層学習と強化学習を組み合わせた機械学習法です。

 

深層学習は結構知られていて、ディープニューラルネットワークを使って学習していく学習手法ですね。

 

強化学習とは、以下のような図でエージェントと環境が状態、行動、報酬の三つの要素をやり取りすることで学習を進める機械学習法です。

 

f:id:spark856:20190624125928p:plain

 

エージェントはある状態に対して、何か行動を起こします。そして環境はその行動に見合った報酬をエージェントに与えます。

エージェントの目標は任意の状態に対して、報酬が最大化される行動を選択できるようになることです。

ただし、ある時刻で得られる報酬だけを最大化するのではなく、将来にわたって得られる報酬の総和を最大化することを考えます。

 

 

プログラミング言語の丸め誤差ってやつ

最近、python数値計算することがあったんですけど、どうも結果がおかしい。

 

(3^{\frac{1}{3}})^3

 

この値は何になりますか??

 

簡単ですね。

3です。

 

実際にpythonで計算してみましょう。

f:id:spark856:20190623151615p:plain

???

 

3にならない・・・。

 

 

理由は簡単です。

(3^{\frac{1}{3}})^3

=(3^{0.33333…})^3

=3^{0.99999…}

 

って感じで計算するからですね~。

 

これはpythonでのべき乗の指数部が、「有理数」に対応していないことを意味しています。

 

有理数モジュールとか使ったらうまくいったりするのでしょうか。