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

重複組合せの復習

例えば「区別のないK個の玉を、区別のあるN人に分配する組み合わせ」のように、区別のないものを区別のあるものに分配する組み合わせを重複組合せと呼びます。 重複組合せは以下の記号で定義されます。 重複組合せは、を使って以下のように表せることが知ら…

lower_bound(), upper_bound()の練習帳

C++

事前準備 数列は昇順にソートされている必要があります。 #include <iostream> #include <algorithm> int main() { std::vector<int> nums{1,1,1,1,2,2,3,3,3,4,4,6,6,6}; std::sort(nums.begin(), nums.end()); .... } 要素の数を数える 「3より小さい要素数」「3以下の要素数」を数え</int></algorithm></iostream>…

Pythonのインタラクティブシェルで打ったコマンドをファイルに保存

普通のインタラクティブシェルの場合 以下の2行を打ち込めばOKです。 >>> import readline >>> readline.write_history_file('history.py') ↑の例の場合、現在のディレクトリにhistory.pyという名前で保存されます。現在のディレクトリを知りたい場合は以下…

Pythonのライブラリのソースコードの場所を調べる

Python Library Source Code: how can I view it? - Stack Overflowに方法が載っていました。いろいろ方法はあるようですが、もっとも簡単なのは import random print(random) でしょうか。

scikit-learnのSVMを使って多クラス分類を試す

Pythonのscikit-learnを勉強中です。今回は、公式ページにある、手書き文字を0から9に分類するコード (Recognizing hand-written digits — scikit-learn 0.16.1 documentation) を読み解いてみます。 準備 Python 3でscikit-learnを使えるようにします。今回…

Pythonパッケージ集の比較

Pythonの科学技術計算でよく使うライブラリを一挙にインストールできるパッケージ集を比較しました。 比較対象 Download Anaconda Python Distribution Python Distribution and Integrated Analysis Environment | Enthought Canopy pythonxy - Scientific-…

gdbのメモ

gdbの忘れがちな項目をメモ。 引数、標準入力、標準出力を指定 Linuxの場合 gdb (program)でgdbを起動したのち、run (arguments) < (input file) > (output file) Cygwinの場合 Cygwinの場合、↑に書いた方法ではinput fileを読めない(参考:gdb input redir…

Python 3でfunctools.lru_cacheを使って簡単にメモ化再帰

Google Code Jamの公式解説 Dashboard - Round 1B 2014 - Google Code Jamを読んでいて、Python 3には簡単にメモ化再帰する機能が標準ライブラリに含まれていることを知りました。以下、簡単な解説です。 フィボナッチ数を求める再帰関数 お題として、n番目…

PyQt5で、Yahoo! 形態素解析の結果を表示するアプリを作成

PyQt5の練習の続き。もう少し実用的な例として、Yahoo! 形態素解析の結果をWebを通じて取得し、テーブルに表示するアプリを作成しました。 実験環境 Win7 Pro + Python 3.4.3 + PyQt5 アプリのスクリーンショット 最上部には、ご利用ガイド - Yahoo!デベロッ…

PyQtで100個のスライダーを並べる

PythonのGUIツールキット PythonでGUIアプリを作るためのライブラリを調べました。QtのPythonバインディングとしてはPyQtとPySideが有名なようです。特徴を比較すると以下のようになります。 ツールキット 開発元 ライセンス 備考 PyQt4 Riverbank Computing…

C++11のラムダ関数の簡単なまとめ

C++

C++11で導入されたラムダ関数を使えるようになるための簡単な覚書です。 ラムダ関数とは? 名前のない関数のことです。無名関数と呼ばれることもあります。 わざわざ関数を定義するほどのこともない、ちょっとした処理を行いたいときに使われることが多いで…

日本国憲法前文をMarkdownで書き直す

日本国憲法前文といえば、しばしば悪文の代表例としてやり玉に挙げられることがあります。例えば以下の一文を見てみます。 われらは、いづれの国家も、自国のことのみに専念して他国を無視してはならないのであって、政治道徳の法則は、普遍的なものであり、…

Pythonで (-N//2) と (0-N//2) は必ずしも同じにならない話

Be careful: (-N//2) and (0-N//2) を見ていて混乱した話です。 問題のコードを実行 まず、上記リンクで話題になっているコードを動かしてみます。 N = 99 print(-N//2) print(0-N//2) をPython 2またはPython 3で実行すると、以下の結果が出力されます。 -5…

C++で1文字の繰り返しからなる文字列を作る

C++

C++で"aaaaa"などのように単一文字の繰り返しからなる文字列を簡単に作るには、以下のようにstringクラスのコンストラクタを利用します。 #include <string> ... std::string(5, 'a') ... これは、「長さ5の文字列を作り、'a'で埋める」という意味になります。 例と</string>…

Pythonで2変数関数に対してニュートン法を用いる

前回、Pythonで2変数関数に対して最急勾配法を用いる - minus9d's diaryにて、2変数関数に対する最急勾配法を Pythonで実装しました。 今回は、最急勾配法よりも収束が早いと言われるニュートン法を実装してみます。私の理解が正しければ、ニュートン法では…

Pythonで2変数関数に対して最急勾配法を用いる

以前、Pythonで最急勾配法を実装し、グラフを描く - minus9d's diary という記事にて、1変数関数に対して最急勾配法を用いて極値を求める実装を紹介しました。 今回の記事では、2変数関数に対して同じことをやってみます。目的関数はです。紙と鉛筆で極値を…

matplotlibをオブジェクト指向スタイルで使う その1

Matlabスタイルとオブジェクト指向スタイル matplotlibは、以下のようにmatplotlib.pyplotに属する関数を順番に呼んで使われることが多いです。 import matplotlib.pyplot as plt plt.plot([1,2,3,4]) plt.ylabel('some numbers') plt.show() これはMatlabで…

Pythonで最急勾配法を実装し、グラフを描く

最急勾配法(gradient method)は、ある目的関数の極値を求める方法の一つです。勾配がもっともきつい方向にを少しずつずらしていく方法です。極大値を求める場合は再急上昇法(gradient ascent method)、極小値を求める場合は最急降下法(gradient descent meth…

一変数関数、多変数関数の凸性を求める方法

機械学習の教科書「言語処理のための機械学習入門 (自然言語処理シリーズ) 」を再び読み始めました。勉強したことを忘れないように、メモがてらなにか書いていこうと思います。 今回は関数の凸性、つまりある関数が上に凸か、下に凸か、もしくはそのどちらで…

zshで、コマンドライン実行時にもコメントを使えるようにする

zsh

zshで過去のコマンド履歴を検索する機能(数文字タイプしてCtrl + R)を頻繁に使う人なら、自分の打ったコマンドにコメントを打って検索のキーワード代わりにしたいことがあるかもしれません。例えばこんな風に: ls -1 # print one entry per line しかし普…

Pythonのループはelseを持てる

Pythonのforループやwhileループは、elseを持つことができると聞いて驚きました。例えば以下のコードは合法です。 for i in range(5): print("i = ", i) else: print("loopは無事に終了しました") 実行例は以下です。 i = 0 i = 1 i = 2 i = 3 i = 4 loopは…

Pythonのsort(), sorted(), reverse(), reversed()の使い方

いまだに混乱してしまうのでメモ。Python3でテストしていますがPython2でも同じはずです。 sort() list.sort()という形で使います。元のリスト自体の中身が変わります。Rubyでいう「破壊的メソッド」にあたります。 nums = [2, 4, 1, 6] nums.sort() # 破壊…

Kindle for Androidで画面回転をロックまたは許可する方法

AndroidのKindleアプリで画面回転をロックまたは許可するには、本を開いた状態で画面の右下をタップします。 すると上図のように錠前アイコンが現れます。錠が外れた状態だと画面を自由回転でき、錠がはまった状態だと画面がロックされます。 どうも開く本の…

os.path.joinでリストを連結する

Pythonのos.path.joinを使うと、実行環境に応じた適切なセパレータによってパスを連結できます。 import os os.path.join("path", "to", "somewhere") # 'path/to/somewhere'が返る(linuxの場合) join()の引数にリストを与えるのはよくある間違いです。以下…

Python3でmkdir -pする(深いディレクトリを作る)

bashなどでmkdirに-pを付けると、深い階層のディレクトリを一発で作れます。 mkdir -p very/deep/dir これと同じことをPython3(3.2以上)で行うには、os.makedirs()を使います。 import os os.makedirs(os.path.join("very", "deep", "dir"), exist_ok=True) …

VS2013で、新しいファイルをUTF-8で作成する

Visual Studioで新しいファイルを追加すると、以下のようなダイアログが出ます。 このダイアログでファイルを新規作成して保存すると、文字コードはShift-JISになってしまいます。しかし、できることならUTF-8で保存したい。ファイルの新規作成時に文字コー…

VS2013では初めからminimapが使える

minimapといえば、Sublime Textというエディタが提供して人気になった、コードの全体像を縮小して表示する機能のことです。Visual Studio2013では初めからその機能が組み込まれていることをさっき知りました。 minimapを有効にするには以下の手順を踏みます…

Pythonの辞書で順番を保つにはOrderedDictを使う

Pythonの辞書(dict)では、keyを登録した順番は記憶されません。 例えば以下のコードを実行すると、 # 普通のdictの場合 d = {} d["zz"] = 0 d["cc"] = 30 d["aa"] = 10 d["bb"] = 20 d["aa"] = 40 for key, val in d.items(): print(key, val) 以下の結果が…

VS2013にSign inできない現象(SP324098)を一応解決

現象 Win7 + Visual Studio 2013 Community Editionにて、Sign inしようとすると以下のようなエラーメッセージが出て失敗しました。 Sorry, we ran into a problem SP324098: Your browser could not complete the operation. 調査は難航 SP324098でググって…

Visual Studioのコードスニペット機能を使って高速にコードを書く

常識かもしれないのですが、Visual Studioのコードスニペット機能にいまさら気が付きました。 例えばC++の場合、classと打鍵してからTabを押すと、自動的に以下のコードスニペットが挿入されます。 class MyClass { public: MyClass(); ~MyClass(); private:…

Python Toolsで対話的にデバッグする

Visual StudioにPython Toolsプラグインをインストールした構成にて、コードの実行中に対話的にデバッグを行う方法についてご紹介します。Windows 7 + Visual Studio Express 2013 for Windows Desktop Update 4 + Python Tools 2.1という構成で動作を確認し…

matplotlibの使い方メモ

自分用メモ。ブログ用に編集し直すのが面倒なので、IPython Notebookのノートへのリンクを置きます。 nbviewer.ipython.org/gist/minus9d/e7fea3fc9301762ce9e0

IPython Notebookのノートをgitなどで版管理する

IPython Notebookのノートは、拡張子が.ipynbであるファイルとして保存されます。この.ipynbファイルを覗いてみると、以下のようにpngがファイル内に埋め込まれていることがわかります。 "outputs": [ { "metadata": {}, "output_type": "display_data", "pn…

IPython Notebookのちょっとしたメモ

最近流行のきざしがあるIPython Notebookに関するちょっとしたメモです。 定型文 %matplotlib inline グラフをインラインに埋め込むためのおまじない %pylab inlineは名前空間を汚染する副作用があるので使用しない方がよい (参考:iPython Notebookの--pyla…

gitで、昔のrevisionのファイルを閲覧する

git

Is there a quick git command to see an old version of a file? - Stack Overflowが参考になります。 方法1: コマンドラインを使う 以下のようにgit showコマンドを使います。 $ git show REVISION:path/to/file 例えば以下のように書きます。 $ git show …

OpenCV C++とPythonでの画像の取り扱いの比較

表題について自分なりにまとめています。経験値が足りないせいで誤ったことを書いているかもしれません。 C++のcv::Mat 例えば縦幅480, 横幅640のカラー画像を例にとって考えてみます。 cv::Mat img = cv::imread("board.jpg", CV_LOAD_IMAGE_COLOR); cv::Ma…

OpenCVがアルゴリズムのコンペを開催

OpenCV Vision Challenge | OpenCV によると、OpenCVがアルゴリズムの公募を行うようです。分野は以下の11個です。 (1) image segmentation (2) image registration (3) human pose estimation (4) SLAM (5) multi-view stereo matching (6) object recognit…

Visual Studioで、namespaceのブロック内をインデントしないようにする方法

従来のVisual Studioでは、namespaceで囲ったブロック内が強制的にインデントされました。しかし、Visual Studio 2013のUpdate 2から(?)、インデントしないように設定できるようになったようです。(参考:Option to stop indenting namespaces in C++ code …

C++にてPImplイディオムを使ってUnion Findクラスを実装する

「C++のためのAPIデザイン」(AA) をKindleで購入し、読み始めました。残念ながらページレイアウトが固定で、スマホなどで読むにはまったく向いていません。しかしKindle Cloud ReaderにアクセスするとPCからでも本を開けるようになったので、27インチのディ…

"random.py", "test.py"などのファイル名を付けるとハマる

Pythonのrandom.choiceを試してみようと、以下のようなrandom.pyを作成し、実行しました。 #!/usr/bin/env python3 # -*- coding: utf-8 -*- import random print(random.choice(["a", "b", "c"])) しかし、以下のようなエラーが出て実行できませんでした。 …

Internet Archiveが公開するアーケードゲームは合法なのか?

InternetArchiveが懐かしのアーケードゲーム900本を無料公開、全部ブラウザで遊べるぞ! - ねとらぼなどで報じられている通り、Internet Archiveが大量のクラシックアーケードゲームを公開し始めました。しかしInternet Archiveには著作権に関する記述が見つ…

Picasa フォト ビューアで高速に画像を送る方法

キーボードの左右キーを押すと一枚ずつ画像を進めたり戻したりできますが、 Ctrlキーを押しながら左右キーを押すと、10枚ずつ画像を進めたり戻したりできます。 また、Ctrlキーを押しながらマウスホイールを回しても、画像を進めたり戻したりできます。

GCCでCPUクロックをカウントする

c++ - clock cycle count wth GCC - Stack Overflowに書いてあるコードをそのまま試してみました。環境はWindows 7 + Cygwin + g++ 4.8.2です。 #include <iostream> #ifdef __i386 __inline__ uint64_t rdtsc() { uint64_t x; __asm__ volatile ("rdtsc" : "=A" (x));</iostream>…

OpenCVを使うならC++かPythonか?

Computer Visionの巨大なライブラリであるOpenCV。C/C++, Python, Javaのインターフェースが提供されており、どの言語で始めるか迷っている方もいるかと思います。私は残念ながらJavaからOpenCVを使ったことはないのですが、C++からはそれなりに、Pythonから…

Python版OpenCVにて補完機能を使う (VS2013 Python Tools)

以前に Visual Studio Express 2013をPythonのIDEとして使う - minus9d's diary という記事を書きました。これの延長として、VS2013にてOpenCVのPythonバインディングを使用するときに、補完機能を有効にする方法について書きます。 「ソリューションエクス…

MacportsでPython2.7.5をPython2.7.8に更新しようとして失敗

Macに入っているPython2.7を、2.7.5から2.7.8へと更新しようと以下のコマンド $ sudo port upgrade python27 を打つと、以下のエラー Warning: The Xcode Command Line Tools don't appear to be installed; most ports will likely fail to build. Warning:…

Visual Studio Express 2013をPythonのIDEとして使う (Python Tools)

Microsoftから公式リリースされているPython Tools for Visual Studio - Homeを使うと、Visual Studio 2013をPythonのIDEとして使うことが可能となります。どうせ有償であるProfessional版だけでしょ?と思いきや、2.1バージョンからはなんと無償であるExpre…

Pythonの標準ライブラリargparseで引数をパースする

Python 2.7から標準ライブラリに加わったargparseを使うと、簡単に引数のパーサが書けます。詳細はargparseを使ってみた - そこはかとなく書くよ。を見ていただくとして、ここでは基本機能だけ書きます。 目標 以下のようなargparse_test.pyを作ることを目標…

Python 3で、iTunesのXMLをパースする その2

Python 3で、iTunesのXMLをパースする その1 - minus9d's diary の続きです。 XPathを使ってXMLを探索 XMLから所望のデータを取り出すには、XPathと呼ばれる、XMLのツリーのうち特定の条件にあった部分を取り出すための言語を使うのがよいでしょう。 今回のX…

Python 3で、iTunesのXMLをパースする その1

AppleのiTunesで曲を管理していると、"iTunes Music Library.xml"というXMLファイルが自動生成されます。このファイルを分析することで、「もっとも曲数が多いアーティスト」「リリース年別の曲数の遷移」などさまざまな情報を抽出できます。 今回はPython 3…