読者です 読者をやめる 読者になる 読者になる

サブロウ丸

お気軽に..

三角形の合同条件と、それに対応する面積公式

ある二つの三角形について、その形と大きさが等しいとき、それらは「合同である」と言います。 この合同についてみなさん、中学校で以下の三つの合同条件を習ったと思います。 ・三辺相等 ・二辺狭角相等 ・二角狭辺相等 例えば三辺相等について、 三角形の…

対称グラフの完全マッチング数について

完全マッチングについて面白い定理を見つけたので、ご紹介します。 まず、完全マッチングについて、 グラフ理論においてマッチングとは、グラフ中の枝集合で、互いに端点を共有しないもののこと。特に、これ以上枝を追加できないもののことを極大マッチング…

【Mac】 jad を homebrew からインストールする

jad を使えば、javaのclassファイルのデコンパイル(コンパイルをする前のソースコードを復元すること)ができます。 homebrewを使ってインストールするには brew tap caskroom/cask brew install caskroom/cask/jad を実行してやれば良いです。 homebrew/bina…

Java 配列をクラスオブジェクトの要素に

いつもはPythonの記事ばかり書いていますが、今回はJavaです。 Javaで、整数と配列と二次元配列の3つを一度に返す関数を作りたかったのですが、 Javaの関数は基本的に返り値が一つだけなので、 関数の返り値を保存するためだけのクラスを作ることにしました…

フロー分解

以下のグラフのフロー分解を考えます。 まず、フローとは何かという話ですが、 始点(図s)から終点に(図t)に水を流すことを考えます。 そのときの"水の流れ"のことをフローと呼びますが、それにはいくつか条件があります。 図のノード(丸)とノードを結ぶ矢印…

劣モジュラ2

今回は Chapter2 劣モジュラ最適化の基礎 2.4 列もジュラ最適化と多様体の 貪欲解の最適性についてです。 ラグランジュ緩和については以下のPDFが分かりやすくまとまっていると思います。 http://www.bunkyo.ac.jp/~nemoto/lecture/opt-model/2008/duality1-…

劣モジュラ1

「劣モジュラ最適化と機械学習」という河原先生と永野先生が書かれた本を最近勉強しています。 https://www.amazon.co.jp/劣モジュラ最適化と機械学習-機械学習プロフェッショナルシリーズ-河原-吉伸/dp/4061529099/ref=sr_1_fkmr0_1?ie=UTF8&qid=1492411085…

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ファイルが作れるらしい。。 最新のプロトコルバージョン…

【Mac】【豆】ターミナル上で、クリップボードに保存、から出力する。

標準出力をpbcopyに渡すと、クリップボードに保存されます。 # ls の出力結果をコピー ls | pbcopy # カレントディレクトリの絶対パスをコピー echo -n `pwd` | pbcopy 逆にpbpasteを使えば、クリップボードからペーストができます。 echo `pbpaste` 等..

【Mac】 ターミナルでスリープ、その他

ターミナル上からスリープ、シャットダウン、システム終了等を行うことができます。 osascriptというAppleScript を実行するためのコマンドを使用します。 スリープ osascript -e 'tell application "Finder" to sleep' 【豆】 逆にスリープを防ぐには caffe…

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は配列で…

numpy.array の dtype ..

下記のような、csvファイルをnumpyのarrayに読み込ませるスクリプトを書いていました。 from csv import reader as csv_reader # データの読み込み print('data reading...') data = np.array([ [0 for ii in range(num_column)] for i in range(num_row)]) …

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…

【Mac】ターミナル ショットカットキー

ターミナルでpythonと打ち込むときに pyhtonになっていたりpyてょんになったりしますよね。 これが煩わしいので、ショットカットキーを設定しようと思います。 ターミナルの環境設定から右のキーボードを選択し、「+」を押してキーとアクションを設定します…

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) 公式の例。再帰的にフィボナッチ数を計算していますが、そのまま実行すると呆…

【Mac】ターミナルからGoogle翻訳

ターミナル上にGoogle翻訳の結果を表示させる方法です。

Pythonで素数列挙

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

tacの実装

LInuxコマンド tac を実装しました

【Mac】ターミナル 文書の表示

cat, head, nl

【Mac】Uptexにパッケージを追加する

Uptex texスクリプトをドラッグ&ドロップすれば、pdf化してくれる便利なapp。 Uptexのダウンロード JIS X0212 for pTeX から。 パッケージの追加 主題です。 Uptex.app内に、標準でいくつかパッケージが入っているのですが、そこに入っていないパッケージを…

Python 入力まとめ

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

Python sorting外観

前3回ほど、pythonのlist操作についての記事を書きましたが、 Python コーディング(基) list編 - サブロウ丸 Pythonコーディング(注) list編 - サブロウ丸 Python コーディング(豆) list編 - サブロウ丸 その応用として、 みなさんお馴染みのsortingをコーデ…

Python コーディング(豆) list編

pythonのlist操作に関する豆達です。 enumerate: index付きforループ a = ['I', 'like', 'cats'] for i, word in enumerate(a): print(i, word) > 0 I > 1 like > 2 cats index: listにおける指定した要素のindexを取得 a = [1, 2, 3] a.index(2) > 1 #要素…

Pythonコーディング(注) list編

copy pythonではすべてのオブジェクトは参照渡しになっています。だからlist等をcopyするときには注意が必要です。 a = [0, 1, 2] b = a b[0] = 'Hello' b > ['Hello', 1, 2] a > ['Hello', 1, 2] # bを変更するとaも変更されてしまう これを避けるには copy…

Python コーディング(基) list編

list操作(基)sortの話です. sort sortとsortedの2種類. 使い方その他は下記. a = [2, 3, 4, 1] sorted(a) > [1, 2, 3, 4] #aのsort後のlistが出力される a > [2, 3, 4, 1] #aに変化はなし a.sort() a > [1, 2, 3, 4] #a自体がsortされている. sorted(a, reve…

【Mac】ターミナルで辞書を表示

ターミナルから辞書を開きたい...誰しもが一度は思うこれ()を実現したい... 単純な方法 ホームディレクトリの.bashrcを開いて dict(){ open dict://$1 } を追記して保存する。 すると、例えばdict appleと入力すると、辞書appのappleのページが表示されます…

pipについてもう少し

前回からの続きです pipの導入 - サブロウ pip 基本ではないかもコマンド pip freeze インストールしたパッケージリストを出力します。 例えばpip freeze > hoge.txtでパッケージリストをリダイレクトで保存しておき、pip install -r hoge.txtとすることで、…

pipの導入

pipはpythonのパッケージマネージャーです。 pythonを使うなら必須の存在ですね。 pipはpythonをbrewでインストールすると自動で付いてきます。(たしか) python3以降を使う場合は、pipではなくpip3を使います。 (pip install pip3でインストールできます) pi…

ls -Gの配色、文字の太さを変更

ls -G と入力するとフォルダなら青、…というふうに種類によって色付けされます。 この時の配色を変更する時は, ホームディレクトリの .bash_profileに export CLICOLOR="true" export LSCOLORS="exfxcxdxbxegedabagacad" を追記. これはデフォルト設定. この…

ack、tree、slコマンド

前記事でhomebrewの導入のことを書きましたが、brewでインストールできるパッケージの例を3つ紹介します。 homebrew導入 - サブロウ まず1つ目 ack: grep + find brew install ackでインストールできます.。 これは例えば、'apple'という文字列がどのファイ…

homebrew導入

homebrewはmacOS用パッケージマネージャーです。 以下サイトからhomebrewをインストールできます(何を今更...) Homebrew — macOS 用パッケージマネージャー インストールが終了すると、コマンドbrewが使えるようになっています。 brew基本コマンド brew inst…

【Mac】ターミナル、コマンドの登録

例えばlsコマンドはディレクトリの中身を表示させるものだが、オプション-Gをつけてls -Gとすると、ディレクトリの中身をその種類に応じて色付きで表示してくれます。 だが、わざわざ毎回ls -Gと入力するのは面倒臭いので、lsと打つだけでls -Gが実行される…