arange関数(p31)



何回も使ってたはずなのに、arange関数の使い方を忘れた。調べると、第一引数(下限値)が閉区間、第二引数(上限値)は開区間になるらしい。


np.linspace()

:この関数では要素数を指定して等差の配列を得ることが出来る。

等差数列を得たい時に、交差と要素数のどちらを指定したいかによって関数を使い分けると良い。


print(np.arange(-10,10,2))
print(np.linspace(-10,10,2))
[-10  -8  -6  -4  -2   0   2   4   6   8]
[-10.  10.]




関数を微分する関数(p36)



微分する関数を作るのは容易で、いつも通り def bibun():のように微分の関数を作れば良い。

問題は関数の戻り値を関数にしたいという点。

これが意外と、良く分かっていないところだった。

A関数の中にB関数を埋め込み、そのA関数の返り値をB関数にすれば良いというのが解決法で、考えてみればそりゃそうかという感じだった。

def after_bibun(f):
    #微分する関数を中に作る
    def bibun(x):
        h = 1e-6
        return (f(x+h) - f(x-h) / (2*h))
    
    return bibun 




「r」ってなんだ(p38)



突如出てきたlabel =の後に出てきた「r」。見たことはある気がしたが意味が分からなかった。

調べると、これはr以降の文字列を 「確実に文字列である」 と認識させるためのもので、別になくても同じ結果になった。あらゆる環境で動作するために一応書いたのかな?


print ('this is a sentence.')
print ('\this is a sentence with an indent.')
print (r'\this is a sentence with an indent') # 「r」があるとそれ以降の文字列をエスケープシーケンスとして認識しない
this is a sentence.
	his is a sentence with an indent.
\this is a sentence with an indent


このように、事故でエスケープシーケンスと認識されてしまう事を防いだりできる。

エスケープシーケンス

:「\」と英字を組み合わせて、特殊な意味を持たせられる文字の並び(sequence)の事。上の例なら、thisの「t」という役割から免れる(escape)ことが出来る文字の並びがあるよ、ということだと勝手に理解している。




オブジェクト指向とは結局なんなのか



色々な本にオブジェクト指向の大切さが書かれているけれど、結局何なのか。

まず、何がオブジェクトなんだろうという疑問がずっとあった。オブジェクトは「モノ」という意味で、pythonにおける「モノ」とは何かが重要だ。調べた結果、それはすなわちクラスから作られたインスタンスのことなのだと分かった。

オブジェクト=インスタンス

と考えて差し支えないような気がした。そのインスタンスすなわち「モノ」を使って、プログラムしていく。



だからオブジェクト指向とは、まずクラスを作って、そこからインスタンス(オブジェクト)を生成する方向性で開発しようねという考え方なのかなと思った。

一般化してからコード作れよ、ということだろうか。今はそのくらいでいいやと思った。 (参考HP


解析的な微分と数値微分



初めて聞いた言葉だったが、これまで知っていた微分の概念にただ名前がついただけだった。

  • 解析的な微分は公式に則って微分すること(log(x)の微分は1/xになるとか
  • 数値微分は微分の定義に従ってlim飛ばして気合で計算すること

しかし、上記の説明は表層を見ただけの説明にすぎず、根本的な違いは以下参照。

無限と有限

:実は両者には、無限と有限という対照的な違いがある。

機械学習において、数値微分ではlimを飛ばすときのhを限りなく小さいが有限の値に設定する。つまりこの計算は有限であり、また離散的となる。一方解析的な微分は無限を含んだ微分であり、これはコンピューターには難しい計算らしい。