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

唯物是真 @Scaled_Wurm

プログラミング(主にPython2.7)とか機械学習とか

numpyでcsvを読み込む / scikit-learnでsvmlight(libsvm)形式のファイルを読み込む

前までRを使っていたのですが、せっかくPythonを使っているのだから全部移行したいなーと思って色々勉強してます。 numpyでcsvを読み込む numpy.genfromtxt関数、numpy.loadtxt関数を使えば簡単に読み込めるみたいです。 import numpy as np data = np.genfr…

Codeforces Round #162 (Div. 2) C・D問題

昨日の記事で解けていなかった問題を終わってから思いついたので書いとく。 C問題 Problem - C - Codeforces ある範囲にリスがいて、入力文字列に従ってそれが左半分か右半分に移動する(どんどん範囲は狭くなる)。 このときリスがi番目の入力でいた位置に対…

Pythonで再帰が深すぎる時

Pythonで関数の再帰を使った時にたまに以下のようなエラーが出ます "RuntimeError: maximum recursion depth exceeded in cmp"このエラーは再帰の数が深すぎると出るらしいです。 以下の関数を実行すると再帰の最大数を調べることができて、私の環境では1000…

Pythonで文字列から一部の文字を削除するときの速度比較(replaceとsubとtranslate)

Pythonでの文字列置換をマスターする - じっくりコトコト煮込んだみかん 上の記事を読んでtranslate関数で文字の削除ができるというのを初めて知りました。 replace関数やtranslate関数の速度の違いが気になったので適当に実験してみました。'ABCDEFGHIJKLMN…

Pythonでの数値とビット文字列の変換方法

メモ程度の内容。 ビット文字列から数値 >>> int('0011', 2) 3 >>> int('0b0011', 2) 3 数値からビット文字列 >>> bin(10) '0b1010' 注意点は'1010'ではなく'0b1010'になること。 負の値 数値の符号がマイナスの場合には以下のようになる。 2の補数にはなら…

Pythonのlistとnumpy.arrayとかの速度比較

導入 Pythonの数値計算ライブラリNumPyのarrayを使って、標準のlistを単純に置き換えてみると遅くなることが多いです。 実際どれぐらい速度に差があるのかlist, array, numpy.arrayで比較してみました。 処理時間の計測 Pythonに含まれるライブラリのtimeit…

集合とかベクトルの類似度の計算のメモ

Pythonで実装する類似度計算 - Screaming Loud #1283. 共起性の計算法 ↑この辺りの記事を見て、集合とかベクトルの類似度の計算の記事を下書きのまま放置していたことを思い出したので書き上げた。類似度の計算のコードを書いたのでそれを載せるだけにしよう…

DigitalArts プログラミングコンテスト2012 に参加した

Welcome to DigitalArts プログラミングコンテスト2012 - DigitalArts プログラミングコンテスト2012 | AtCoder A、B問題は解けたけどC問題は解けず、52位(弱い 終了後にC問題の愚直な実装を試したら当然TLEでしたorz A: C-Filter - DigitalArts プログラミ…

MessagePackとcPickleの速度を比べてみた

MessagePackとcPickleはデータのシリアライズに使われるライブラリです。 DSAS開発者の部屋:MessagePackのPython Bindingをリリースしました MessagePackとcPickleの速度比較は↑の記事にありますが、cPickleは↓の記事のようにプロトコルバージョンによる速度…

Project Euler Problem 61

Problem 61 - Project Euler 3,4,5,6,7,8角数を計算して、それぞれのn角数から1つずつを使って、最初の2桁と最後の2桁が一致していくようなループ(3つだけの場合の例、8128, 2882, 8281)を見つける。2桁が限定される時点でかなり制限されるので、あらかじめn…

天下一プログラマーコンテスト2012 予選Bに参加 #klabtenka1 #AtCoder

Welcome to 天下一プログラマーコンテスト2012 予選B - 天下一プログラマーコンテスト2012 予選B | AtCoder A問題しか解けなかった。 B問題で爆死して、C問題は部分点のみで85位orzあまりにもアレだったのでC問題は制限時間後に解いた。 A: 孫子算経 - 天下…

AtCoder Regular Contest #006に参加しました

Welcome to AtCoder Regular Contest #006 - AtCoder Regular Contest #006 | AtCoder 実は初参加. 3問目まで解けて62位でした A: 宝くじ - AtCoder Regular Contest #006 | AtCoder 宝くじが何等になっているか計算. そのまま書くだけ. 途中まで数字の重…

Google Code Jam 2012 Qualification Round問題B, C

二時間ぐらいかけてBとCだけ解けた. B 値がp+2*(p-1)以上の個数と,あるいは値がp+2*(p-2)以上の個数(S個まで)を足せばよい. C 数値の前半と後半を入れ替えた時に以下をチェックすればよい. 先頭が0でない 元の数値と等しくない 値が範囲内 すでに出てい…

cProfileでpythonスクリプトのボトルネックを調べる

Pythonのスクリプトの遅い部分を調べるためにcProfileという標準のプロファイラを使ってみました.プロファイラというのはプログラムの実行効率を調べるツールです. cProfileを使うと関数が呼び出された回数(再帰の有無含む)や,どれぐらいの時間を処理に使…

シリアライズ用のライブラリMessagePackを使ってみた

Pythonでシリアライズに使えるライブラリは標準でもpickleやjsonなどがありますが,研究室でMessagePackというものを使っている人がいたので試してみました. MessagePackはバイナリ形式に保存するタイプのもので高速かつ軽量とのこと. Python以外にも様々…

日本語WordNetのフロントエンドを弄る

日本語Wordnetという単語の関係や意味を示した辞書があり自然言語処理ではよく使われています. Python用フロントエンドとしてはy_yanbeさんによるものが知られています. 日本語WordNetの最新バージョンではファイル名が変わっていたり,試してみるとsyns(…

CODE VS用のPythonテンプレート

というわけでCODE VSにmugenenって名前で参加してます. Pythonでクライアントとの入出力に苦しんだので,同じ苦しみを味わう人が減るようにテンプレートを晒しときます. もっと効率の良い書き方があったら教えてくれると嬉しいです. Windows,Python 2.7.…

Pythonでlistとsetを探索するときの速度比較

timeitモジュールを使って経過時間を計測します. 研究室の後輩がlistからsetにしたら速くなった!と喜んでいたのでどれぐらい早くなるか検証. 参考 http://www.python.jp/doc/release/library/timeit.html http://morchin.sakura.ne.jp/effective_python/t…

matplotlibを使おう

Python用のグラフ描画ライブラリのmatplotlibを使って見ました. 使いこなせるようになればRからPythonに完全に移行できそうです. 以前書いたソフトマージンSVMのコードを用いて可視化して見ました. http://d.hatena.ne.jp/sucrose/20111015/p1 結果は以下…

Pythonで日本語関係のイライラ

Pythonを使い始めたときに,一番よく見るのはUnicode系のエラー(UnicodeEncodeErrorとかUnicodeDecodeErrorとか)だと思います. 日本語を扱ってると非常にイライラしてきます. 基本的な対策をメモしておきます. 対策 ソースコードの文字コードを指定 ソ…

ソフトマージンSVMを書いてみた

numpyの練習を兼ねてソフトマージンSVMを書きました. 行列演算に関してはRと比べても大きな不自由は感じないですね. 最適化部分は二次計画法のソルバー(openopt, cvxopt)に丸投げ. openoptから呼べるソルバーのうちデフォルトで含まれているqlcpではデー…

株式会社アイリッジのクイズに挑戦

採用テスト トレーディングカードコンプリート問題100万種類のトレーディングカードがあり、15枚1セット525円で販売されています。全ての種類をコンプリートするまで買い続けるとき、かかる費用の期待値はいくらになるでしょうか。ただし、1セットには全て重…

Pythonで組み合わせ(Combination)を計算

Pythonで組み合わせの総数を計算する関数がなかったので調べてみた. itertools.combinationsは総数を計算するときには使えません. 再帰で計算すると大きな数の時にスタックの最大数を超えてしまってダメ. scipy.misc.comb scipyにscipy.misc.combがあるの…

64bitのWindowsでPythonの環境づくり

新しいPCにPythonの環境構築をした時のメモ. Pythonのインストール Python標準リリース どのバージョンをインストールするか悩んだけど2.7.2をインストール. .amd64と付いているインストーラが64bit用なので注意. インストール後にパスを通す. distribut…

テキスト中の漢字の数を調べる

import unicodedata def countKanji(text): s = 0 for c in text: if (unicodedata.name(c)[0:3]) == 'CJK': s += 1 return s

while/else,for/else

Pythonではwhileやforループにelseが使えると知ってびっくり. elseはbreakなどで抜けずに通常の方法でループが終了したときに実行されるらしい. 今までは途中でbreakしたときと最後まで実行したときを区別するために,わざわざフラグ変数を作っていたので…

contextlibモジュール

urllib2で開いたものを自動的にcloseしたかったんですが,調べたらcontextlib.closing()を使えばwith文で対応できるみたいです. import contextlib import urllib2 with contextlib.closing(urllib2.urlopen('http://www.python.org')) as page: for line i…

PythonでファイルのMD5を計算

hashlib を使えば簡単. ファイルをバイナリモードで開かないといけない. ファイルサイズが大きい場合は,少しずつファイルを読み込んで update 関数を利用することが必要? import hashlib def md5(filename): with open(filename, "rb") as f: data = f.r…

Pythonでsubprocessを使って複数のコマンドをパイプでつなぐ

おそらく以下の記事の方法のほうが簡単です(追記、2013年11月9日) 続Pythonでsubprocessを使って複数のコマンドをパイプでつなぐ - 唯物是真 @Scaled_Wurm knpを使ってみようと思ったのですが,呼び出すときにknpとjumanをパイプでつながないといけません. …

波ダッシュと全角チルダに苦しめられる

Windows上でPythonスクリプトを書いてファイルを処理しようと思ったら上手くいかなくて困ってます.具体的には「〜」がファイル名に含まれているときに失敗します. 調べてみたところ全角チルダ「〜」と波ダッシュ「〜」には色々と問題があるみたいですね. …

電撃文庫の作家の筆の速さ

上で作ったクラスを使って2010年に出版された本を作者ごとにカウントしてみた. やっぱり複数シリーズ書かれている方はたくさん出してますね. 出力 入間人間, 6 川原 礫, 6 水瀬葉月, 5 鎌池和馬, 5 鴨志田一, 4 成田良悟, 4 深沢美潮, 4 折口良乃, 4 ソー…

電撃文庫の新刊情報を取ってくる

最近Pythonに触り始めました. 練習も兼ねて,誰得ですが,電撃文庫の新刊情報を取ってくるスクリプトを書きました. 外部ライブラリのBeautifulSoupがないと動きません. 公式サイトのソースを見てると時期によってHTMLの構造が違うので,他の年月日でもち…

-->