2021-01-01から1ヶ月間の記事一覧

logの和の近似

の近似によくスターリングの公式が用いられます。 これで十分なことも多いですが、もう少しよい近似を考えてみましょう。積分で近似して、 この差を取ると、 summationの中は、 をテイラー展開すると、 だから、summationの中は、 右辺第一項はリーマン・ゼ…

新型コロナウイルスに関連した患者の死亡の統計

https://www.bousai.metro.tokyo.lg.jp/taisaku/saigai/1010035/1012790/index.html ここから辿ると、死亡情報が例えば、https://www.bousai.metro.tokyo.lg.jp/taisaku/saigai/1010035/1012790/1012818.htmlのように得られます。年代・性別・居住地・診断日…

PythonのライブラリをC++で作成する(5)

もう一つ、これはC/C++で行列の掛け算を書いたことがある人にはよく知られていると思いますが、乗数の方の行列を転置すると速くなります。 もう一度C++のコードを見てみましょう。 Matrix C(H, Vec(W)); for(size_t i = 0U; i < H; ++i) { for(size_t j = 0U…

PythonのライブラリをC++で作成する(4)

なぜC++で書いたライブラリは遅いのでしょう。 Pythonのコードは、 for i in range(H): for j in range(W): C[i][j] = int(sum(A[i][k] * B[k][j] for k in range(M)) % D) return C C++のコードは、 for(size_t i = 0U; i < H; ++i) { for(size_t j = 0U; j …

PythonのライブラリをC++で作成する(3)

いよいよ本題、C++でMatrixの掛け算をするPythonのライブラリを作ります。まず、リストをstd::vectorに変換します。 PyObject *mul(PyObject *self, PyObject *args) { PyObject *obj1, *obj2; long D; if(!PyArg_ParseTuple(args, "OOl", &obj1, &obj2, &D)…

PythonのライブラリをC++で作成する(2)

C++で簡単なPythonのライブラリを作ります。 整数同士を掛け算する関数です。さっそくコードを示します。 # setup.py from distutils.core import setup, Extension setup(name = 'mymath', version = '1.0.0', \ ext_modules = [Extension('mymath', ['myma…

PythonのライブラリをC++で作成する(1)

PythonのライブラリをC++で作ります。 例えば、次のような問題を考えます。 H×Wの長方形があり、そこに1×2の長方形を隙間なく敷き詰めます。敷き詰め方は何通りあるでしょう。 2×3なら、の2通りです。 さて、この問題はどのように解くでしょう。この手の問題…