2013-01-01から1年間の記事一覧

「文字⇒数値」はatofでいいわ

C++

sstreamのstringstream使えばいいんだろうけど、こっちの方がタイプ量的に楽。 あとはboost::lexical_cast使えないちゃんの時のために。 #include <iostream> #include <vector> #include <algorithm> //文字列⇒小数の変換ファンクタ struct ToDouble{double operator()(std::string x){re</algorithm></vector></iostream>…

美しいペアプロット図を簡単に作る

R

美しい描画を行うためのパッケージとして有名なggplot2の仲間?にGGallyパッケージなるものがあるらしく、その中のggpairs関数を使うとふつくしいペアプロットが楽に作成できる。 できるのはいいんだが、この関数を使ってplotする際のフォントサイズ変更方法…

NROWとNCOLを使えばベクトルのサイズも取得できる

R

市販の本や色々なサンプルコードで行列のサイズを取得するためにはnrow,ncolを使っているものが多いが、この2つの関数はベクトルに適用する事が出来ないわけですわ。 > x <- 1:10 > nrow(x) NULL > ncol(x) NULL しかし、同名で全て大文字にした関数NROW,NC…

デコレーターがよくわからんのでワチャワチャ書く

掲題の件、そういう事です。 # -*- coding: utf-8 -*- def show_message(f): def wrapper(): print("==== function call ====") f() return wrapper def spam1(): return 1 @show_message def spam2(): return 2 if __name__ == "__main__": print(spam1()) …

RcppでHello, world!

R C++

特に意味があるわけではないけれども、こんな感じか*1。 library(inline) src <- ' Rcpp::Rcout << "Hello, world" << std::endl; ' f <- cxxfunction(signature(), src, plugin="Rcpp") f() 実行結果 > f() Hello, world NULL 参考 Using Rcout for output …

テンプレートで書くか継承で書くか

C++

「数値計算をC++っぽく書く場合、速度的な事を考えるといちいち仮想関数テーブルを漁りにいかないのでテンプレートの方が速いんだろうな」と思っていたが、例のごとく億劫がってやってなかったので、やってみましたよというお話。結論としてはテンプレートを…

コンテナの要素を消去する際の選択

C++

これもまた良く忘れるのでメモ。 以下のようにチョイスするのが効率的。 連続メモリコンテナ系(vector, deque, string etc):erase + remove リスト(list):remove 連想コンテナ系(set, map etc):erase 以下例、「1,2,3,3,5」という要素を格納する各コン…

スワップ技法で確保した容量を削減

C++

STLのvectorにおいて一度reserveされてしまった容量(not サイズ)を削除するための技法。 単純にreserveを再度実行しても要領は削減されないので - std::vector(x).swap(x) と書く。 #include <iostream> #include <vector> int main() { std::vector<int> x; for(int i = 0; i < 1</int></vector></iostream>…

std::uniqueするときはsortを忘れないこと

C++

std::uniqueするときはstd::sotrしてからじゃないと正しくならない点に注意せんといかん。unique_copyでも似たようなコード書ける。 #include <iostream> #include <algorithm> #include <vector> int main () { std::vector<int> v; v.push_back(0); v.push_back(1); v.push_back(2); v.push_b</int></vector></algorithm></iostream>…

ファクター(factor)を生成する関数(gl)

R

題名の通り、ファクター(factor)を生成する関数があったんで備忘録的にメモ。 名前はgl関数でたぶんGenerate Levelあたりだろうか。 > # 2レベルのデータを8個ずつ作ってそれぞれを数値じゃなくてCOntrol, Treatと名付ける > gl(2, 8, labels = c("Control",…

アライメントの調整を楽にする

C++

構造体をVBA(Excel)からC++に投げつける際には、データのメモリへの詰め込まれ方、アライメント(VC++デフォルト8バイト・VBA4バイト)に注意せんといかんわけです。 これを成し遂げるために今までは【プロジェクトのプロパティ】→【C/C++】→【コード生成…

vectorの配列番号をメモったまま(部分的に)並び変える

C++

昇順・降順ともに一旦ベクトルの値をindex-valueでペア化して、それをソート(ここではpartial_sort)するような関数(ここではlessPair, greaterPair)を用意すればOK。 ここではベクターの上位二番目の位までを降順並び替え。 #include <vector> #include <algorithm> #includ</algorithm></vector>…

STL vectorをRcpp::NumericMatrixのある列(行)に代入したい

R C++

生のstl vectorをNumericMatrixに突っ込もうとすると怒られた、一方、一旦Rcpp::NumericVectorを経由させたらイケた。 以下、サンプル。行・列ごとの代入もラクラクで便利。 library(Rcpp) library(inline) src <- ' std::vector<int> x(2,111); NumericMatrix xx</int>…

vectorの指定したiteratorの要素番号を取得する

C++

これも良く忘れるのでメモん。例えば最大の要素自体はmax_elementで取得できるんだけど、それのindex番号が欲しい時の書き方。iteratorの初めとのdistanceを取ればよい。別に最大要素のiteratorじゃなくても良くて適当なiteratorとのdistanceしてやればいい…

タブ区切りのテキストを読み込む

これが一番楽っぽい。 #include <iostream> #include <fstream> #include <string> #include <vector> int main() { const std::string file_name = "test.txt"; std::ifstream file(file_name.c_str()); std::string temp; std::vector<std::string> items; while (getline(file, temp, '\t')) { items.push_</std::string></vector></string></fstream></iostream>…

文字列を全て大文字(小文字)に変換したい

C++

時折ド忘れするのでメモ。 要するにtransform + toupper(tolower)の組み合わせが一番楽に出来るぞと。 #include <iostream> #include <string> #include <algorithm> int main() { std::string x("abCdef"); std::transform(x.begin(), x.end(), x.begin(), ::toupper); std::cout << x; r</algorithm></string></iostream>…

QuandlのAPIを叩いてデータ(経済・金融指標)を取得する

R

Quandlというサイトを何方かから教えていただいて、ちょっと調べてみるとデータをAPI経由で取得できるとのことでこりゃ便利だぞというわけで使ってみる。 日本に関連したデータは http://www.quandl.com/japan にまとまっている。今回はIMFが公表している世…

ケイグォ(Kaggle)が俺にまだ知らないRの機能を使えと囁いている

R

cut関数(連続データの離散値化) 連続値をとるデータを適当な区間(breaksで指定)で分割して、factor化してくれる。 > x <- rnorm(10) > x [1] 0.07927061 0.81770466 0.21693545 -0.95629685 1.77248104 -1.29774920 -1.05448409 -0.55145272 2.30786460 […

R言語でデータ拡大(Data Augmentation)サンプリング法を実装してみた

データ拡大 (Data Augmentation)サンプリング法ってのをお勉強したのでそのまとめ。 概要&アルゴリズム 説明は2つ目の参考LINKに書いてある方法でずばり良いと思う。 要するに 分布から直にサンプリングしたいんだけど、それが難しいという状況の時、適当…

R言語でスライスサンプリング(Slice Sampling)を実装してみた

スライスサンプリング(Slice Sampling)というサンプリング手法 Slice sampling, Radford M. Neal, Source: Ann. Statist. Volume 31, Number 3 (2003), 705-767. [physics/0009028] Slice Sampling についてお勉強していたのでまとめる。以下の文章で「原論…

実行したいファイルが保存してあるフォルダを自動で作業フォルダにしコードを実行する方法

R

昔っからやろうやろうと思っていておざなりになっていたお話。 モチベーション せっせとコードを書いていると、だんだんファイルが肥大化してくるものでして、当然それを別ファイルに分けて、メインのファイルからsource関数やらでその別に作成したファイル…

関数やクラスのメソッド中に、ローカルにクラスを定義できるってのを知った

C++

クラスの中にクラスを書けることはpimlなんかを通じて知っていたのだが、関数の中にもローカルにクラスを定義出来ることは知らなかったのでメモ。ファンクタとか使うのに便利そう。 #include<iostream> void hoge() { class Hoge { public: void Shout(){std::cout << </iostream>…

reshape2でデータ整形

R

パッケージのサンプルを例に手を動かす。 まずはパッケージのロード&使うデータ(airquality)の確認。 このairqualityデータフレームは「ozone,solar.r,wind,temp,month,day」を列に持つデータフレームということ。 > library(reshape2) > names(airqualit…

学習の記録ー13(クラスのインデントがわからん)

F#

頭出し F#でクラスを書くときにのインデントがよくわかってないので、以下に書くコードのMyFormクラスを適当に書き変えて コンパイル通る コンパイル通らない をメモっておきたい。 基本、=の後は改行+インデントしとけばいいという印象。ただclass...endの…

学習の記録ー12(コンピュテーション式、Computation Expressions)

F#

F Sharp Programming/Computation Expressions - Wikibooks, open books for an open world がすごい解り易かったので適当にメモりつつ、コード写経。話の流れとしては 普通の書き方⇒モナド前夜的な書き方⇒モナド(F#のコンピュテーション式)使った書き方⇒F#…