isatoの活動日記

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

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でのべき乗の指数部が、「有理数」に対応していないことを意味しています。

 

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