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

ヒストグラムと密度

データをヒストグラム化するときにつまづいたのでメモ。 import numpy as np import matplotlib.pyplot as plt np.random.seed(0) data = np.random.randn(1000) plt.hist(data, bins=10, color='red' , alpha=0.5) plt.hist(data, bins=30, color='blue', a…

Intel TBB による並列化

とりあえずこういうシンプルな for 構文を並列化したい。 #include <iostream> #include <vector> int main () { const int N = 100; std::vector<int> v(N); for(int i=0; i<N; ++i) { v[i] = i*i; } } まず for の中身を lambda 式に書き換える。 #include <iostream> #include <vector> int main () { const int N = 100; std::vector<int> v(N); auto calc = […</int></vector></n;></int></vector></iostream>

C++/Eigen での RMSD計算

タンパク質の構造変化を定量化する概念として RMSD (Root mean square deviation) というのがある。これは要するに距離の差の二乗平均なので非常に汎用性がありそうなのだが、タンパク質の構造以外の用途に使う人を見たことがない。 Biopython に SVD (特異…

Eigen で重心

C++ の線形代数ライブラリ Eigen で、3次元位置ベクトルを10個並べた Matrix があって、これの重心が原点になるようにしたい場合 Eigen::Matrix<double, 10, 3> position; // 座標代入部分省略 // 重心ベクトル Eigen::Vector3d centroid; centroid = position.colwise().su</double,>…

1/2 は 0 だ

本日のうっかりミス。論文にある数式にしたがって double x; // ... std::tanh(x - 1/2) と書いたら、なぜか tanh(x) と同じ結果が出てしまう。よくよく考えたら 1/2 は整数型で計算されるので 0 扱いになる。 std::tanh(x - 0.5) に修正。

enum を for で回す

enum の最後に DUMMY を追加して、int 型にキャストすれば for で回せる。もっといいやり方がありそうな気がする。 #include <iostream> enum Week { Sun ,Mon ,Tue ,Wed ,Thu ,Fri ,Sat ,DUMMY }; int main() { for(int i=0; i<static_cast<int>(DUMMY); i++) { std::cout << static_ca</static_cast<int></iostream>…

std::vector を mutex でロックしてマルチスレッドで書き込む

C++

C++ の std::thread でひとつの vector に push_back しまくるコード #include <iostream> #include <vector> #include <thread> int main() { std::vector<int> vi; std::vector<std::thread> vt; for(int i=0; i<100; ++i) { vt.push_back(std::thread([&i, &vi]{ vi.push_back(i); })); } for(int i=0;</std::thread></int></thread></vector></iostream>…

投稿テスト

print("OK") #include <iostream> int main() { std::cout << "OK" << std::endl; }</iostream>