サブロウ丸

主にプログラミングと数学

python

Newtonの差分商補間(後編)

これの後編です。 実際に簡単な関数でいくつか補間による近似を行なってみたいと思います。 fが近似したい関数、gがデータ点(0, 0) (1, 1) (2, 2)から構成した差分商補間になります。 fは2次式でかつ、前編の最後の定理「剰余なしのn項からなるNewtonの差分…

PythonユーザーのためのMatlab対応表

PythonユーザーのためのMatlab対応表を作っていこうと思います。 Matlabのドキュメントは初心者殺しっぽいところがありますよね... 徐々に増やしていく予定です。 list 宣言・要素の追加 リストの結合 set 重複する要素の削除 要素の存在判定 dictionary 辞…

python pulp 変数和

pulpです。 変数の和を表現するときにsumよりもlpSumを使った方が高速にプログラムが動くという話です。 この簡単な最小化問題を例に。aは定数、bは実変数です。 import pulp from random import randint # A new Lp problem prob = pulp.LpProblem('sample'…

【Matlab】【Python】ディレクトリ内のファイルに対し反復処理を行う

python from glob import glob files = glob('パス名'); for file_name in files: pass file_nameにはファイルパスが代入されます。 files = glob('tmp/*.txt') など matlab files = dir('パス名’) numfiles = length(files); for i =1:numfiles file = file…

最短路問題を線形計画法で解く (Python)

グラフの最短路問題はダイクストラ法等で解くのが普通ですが、 今回は線形計画法で解いてみたいと思います。(あえてね) 定式化は こうなります。 最短路を解く問題なのに目的関数が最大化になっているところが面白いですね。 ad(j)については、jの隣接ノード…

【Python】 newton法(非線形計画)

newton法とは、目的関数の最小化元(或いは最大化元)を求める問題に対する反復法と呼ばれる解法の一つです。 関数fと勾配、初期点を問題に合わせて入力する必要があります。

【Python】 最急降下法(非線形計画)

最急降下法とは、目的関数の最小化元(或いは最大化元)を求める問題に対する反復法と呼ばれる解法の一つです。 目的関数fと勾配、初期点を問題に合わせて入力する必要があります。

Python 要素1のタプルの宣言

要素が一つのタプルを作りたいときに a = (1) としても, >>> a 1 >>> type(a) <class 'int'> でaは整数型になっていることが分かります。 じゃあ、どうすればいいかというと a = (1, ) もしくは a = 1, としてやれば、いいです。 なんか気持ち悪いですね。</class>

Python 数独を解く(整数線形計画法)

pythonのpulpモジュールを用いて、数独を線形計画法で解きます。 pulpはpip3 install pulpでインストールできます。

Python multiprocessingで並列処理

pythonの標準モジュールmultiprocessingを使用すれば、並列処理を行うことができます。 Pool map 基本的な使い方は from multiprocessing import Pool with Pool(processes=None) as pool: pool.map(func, iter) Poolの引数であるprocessesには並列処理に使…

Python ジェネレーター内包表記

普通にリストの内包表記の感覚でタプルの内包表記を書こうとすると a = (i for i in range(10)) type(a) > <class 'generator'> と、ジェネレータが作成されてしまいます。 タプルが欲しいのに….と言うときは、 b = tuple(a) とtupleでジェネレーターをラップさせればokです。 </class>…

Python pickle プロトコルの指定

今までpickleファイルを作成するときは、 with open(file, 'wb') as f: pickle.dump(obj=obj, file=f) としていましたが、プロトコルバージョンを高いものに指定してやると、より速く読み込めるpickleファイルが作れるらしい。。 最新のプロトコルバージョン…

Python reduce関数

functoolsのreduce関数を使って、リストの中身を全て足したり掛けたり、といった操作を行えます。 from functools import reduce from operator import add, mul a = [1, 2, 3, 4] # 適当なリスト reduce(add, a) # 総和 > 10 reduce(mul, a) # 総乗 > 24 こ…

Python osmnxのインストール

pythonでopen street mapのデータを読み込めるosmnxという便利なモジュールがあるのですが、 pip3 install osmnxとインストールしようとすると、 fiona/_transform.cpp:473:10: fatal error: 'cpl_conv.h' file not found #include "cpl_conv.h" ^ 1 error g…

Python format形式の中で{}を使う。

pythonのformat形式で例えば{ゴリラ} という文字列を作りたいときは animal = 'ゴリラ' print('{{}}'.format(animal)) print('{{animal}}'.format(animal=animal)) と{を2つ重ねます。

Cython その3 配列の型付け

Cython その2 - サブロウ丸の続きです。 今回はCythonでの配列の型付けの話をします。 配列の要素が全て同一の型の場合、(当然ですが)そのことを宣言した方がより高速になります。 Cythonで上記を実現するにはメモリービューと呼ばれるものを使用します。 nu…

Cython その2 変数の型付け

Cython その1 - サブロウ丸 前回からの続きです。 cython tsp.pyx --annotate もしくは cython tsp.pyx -a を実行すると tsp.html というファイルが作られます。 tsp.html · GitHub これをブラウザ等で開くと という、画面が出てきます。 簡単に言うと、濃い…

Cython その1

Cythonを使ってPythonのコードを高速化します。 Cythonのインストール pip3 install cython コンパイル cythonのインストールが終わったら、スクリプトをc言語にコンパイルするために、以下のsetup.pyを用意します。 (ext_modules = [Extension('tsp', ['tsp…

Python 巡回セールスマン問題

巡回セールスマン問題をpythonで解きます。 問題の概要はwikipediaをご覧ください。 巡回セールスマン問題 - Wikipedia 01整数計画法を使っても解けますが、今回は動的計画法を使用します。 擬似コード (字が汚くて、ごめんなさい) pythonコード DPは配列で…

Python と OpenCV で 類似画像検索

全く同じ画像だけではなく、より幅広く'似てそう'な画像を探します。 OpenCVのインストール OpenCVのインストールに関するページがネット上に多数あることから、OpenCVのインストールの難しさ(というより、やっかいさ?)が伺えますが、例に違わず僕もOpenCVの…

Python 集合と自然数との対応付け

下記のような、集合と自然数の対応付けを考えます。 {0, 1, 2, 3} <—> 15 基本的な考えは2進数表記です。 {0, 1, 2, 3} <—> 20 + 21 + 22 + 23 = 15 {0, 1, 3} <—> 20 + 21 + 23 = 11 これをそのまま関数にすると、 def set2int(_iter): res = 0 for i in _i…

Pythonスクリプト内でシェルコマンドを使う

subprocess シェルの中で他のプログラムを起動し、そのプログラムが生成した出力を知りたいだけなら、getoutput()関数を使う。 import subprocess as sp ls = sp.getoutput('ls') ls > 'Applications\nDesktop\nDocuments\n...(略)' オプションとパイプ、リ…

Python collections の Counterオブジェクト

下記の問題を解きます。 kamipeipaa君は新しいものが大好きです。 kamipeipaa君はある日N個の整数A1,A2,A3,....,ANを見つけました。 整数Aiに対して,Ai=Ajとなるjがi以外に存在しなければ,Aiは新規性があるのではないかとkamipeipaa君は考えました。 上記…

Python 出力の上書き

プログラムのループ文の中で計算の途中結果を出力したいけど、 画面につらつらと出力されるのは鬱陶しいなー...という時に便利な、出力を上書きしていく方法です。 サンプルコード from time import sleep for i in range(10): print('\r', i, end='') sleep…

Python Numba のインストール

PythonパッケージのNumbaのインストールに手こずったので、記録。 とりあえず、やったこと numbaのインストールにはllvmとllvmliteが必要とのことなので e-1. llvmのインストール brwe install llvm e-2. export LLVM_CONFIG=/usr/local/Cellar/llvm/3.9.1/b…

Python 書式指定

文字列の中に様々な形式で値を入れる方法です。 %を使う方法 a = 'I am %d years old.' % 20 > a 'I am 20 years old. ' 様々な言語でお馴染みですね。 指定 データ型 %s 文字列 %d 10進整数 %x 16進整数 %o 8進整数 %f 10進float %e 指数形式float %g 10進f…

Python パフォーマンス計測

pythonプログラムのパフォーマンス、ここでは 1. 行単位の実行時間と実行頻度 2. 行単位のメモリ使用量 を調べる方法を紹介します。 参考ページ(Pythonスクリプトのパフォーマンス計測ガイド | Yakst) 行単位の実行時間と実行頻度 line_profilerモジュールを…

Python functoolsのlru_cache

lru_cache lru_cacheは関数の引数と返り値を保存する。 from functools import lru_cache @lru_cache(maxsize=None) def fib(n): if n < 2: return n return fib(n-1) + fib(n-2) 公式の例。再帰的にフィボナッチ数を計算していますが、そのまま実行すると呆…

Pythonで素数列挙

エラトステネスの篩を使った素数判定法をpythonで実装しました

Python 入力まとめ

pythonスクリプト内に定数やその他データを入力する方法で、僕が知っているものをまとめました。 大きく分けて以下の3つです。 1. sys(引数入力) 2. input(標準入力) 3. fileからの入力 sysを使う(引数入力) python3 file名.py [引数1] [引数2] ... という形…