哲学史の概観
西洋哲学史 岩崎武雄
現代社会のトピック
教養としての大学入試国語
サンデル正義論のステップ
教養としてのロースクール小論文(上)(下)
科学の根っこ
科学革命の構造 クーン
科学哲学の冒険
疑似科学と科学の哲学
相対主義の極北 入不二基義
SF
幼年期の終わり
イノベーションについて
デザイン思考が世界を変える
nacs holic
劇場
ブラックスワン
英国王のスピーチ
クロサワ
影武者
椿三十郎
時代劇
13人の刺客
スコセッシ
シャッターアイランド
ギャングオブニューヨーク
ディパーテッド
ハングオーバーのキャスト
デューデート
ギャングもの
ロードトゥパーディション
カリーノの道
レオン(ディレクターズカットじゃないやつ)
投稿者
schadling
on 2011年5月16日月曜日
Matlabを高速化するためには、forループの計算をできるだけベクトル化することが重要である。
そのために有用なMatlab関数をまとめる。
bsxfun %%%%%%%%%%%%%%%
プログラム例
A = magic(100);
tic
B = bsxfun(@minus, A, mean(A));
toc
tic
C = zeros(100);
for n = 1:100
C(n,:) = A(n,:)-mean(A);
end
toc
isequal(B,C)
出力例
経過時間は0.000171秒です
経過時間は0.005295秒です
ans = 1
reshape %%%%%%%%%%%%%%
プログラム例
A = rand(1200);
tic
B = reshape(A,25,[]);
B = sum(B);
B = reshape(B,48,[]);
B = reshape(B',25,[]);
B = sum(B);
ave_B = B./(25*25);
ave_B = reshape(ave_B,48,48);
toc
tic
for n = 1:1200./25
for m = 1:1200./25
ave_C(m,n) = mean(mean(A(25*n-24:25*n, 25*m-24:25*m)));
end
end
toc
出力例
経過時間は0.003780秒です
経過時間は0.108214秒です
accumarray %%%%%%%%%%%%%%%%%%%%%
histc %%%%%%%%%%%%%%%%%%%%%%%%%%
A = rand(100,1);
tic
N1 = histc(A,0.005:0.01:0.995);
toc
tic
N2 = zeros(100,1);
for n = 1:100
N2(n) = sum(A>=n*0.01-0.005 & A end
toc
isequal(N1,N2)
経過時間は0.000047秒です
経過時間は0.001292秒です
ans = 1
diff %%%%%%%%%%%%%%%%%%%%
A = rand(100,1);
tic
diff1 = diff(A);
toc
tic
diff2 = zeros(99,1);
for n = 1:99
diff2(n) = A(n+1)-A(n);
end
toc
isequal(diff1,diff2)
経過時間は0.000027秒です
経過時間は0.000242秒です
ans = 1
repmat%%%%%%%%%%%%%%%%%%%%%%%
permute %%%%%%%%%%%%%%%%%%%%%%
A = rand(100,100,100);
tic
B = permute(A,[2,3,1]);
toc
tic
C = zeros(100,100,100);
for l = 1:100
for m = 1:100
for n = 1:100
C(m,n,l) = A(l,m,n);
end
end
end
toc
isequal(B,C)
経過時間は0.011770秒です
経過時間は1.910813秒です
ans = 1
sparse %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
そのために有用なMatlab関数をまとめる。
bsxfun %%%%%%%%%%%%%%%
プログラム例
A = magic(100);
tic
B = bsxfun(@minus, A, mean(A));
toc
tic
C = zeros(100);
for n = 1:100
C(n,:) = A(n,:)-mean(A);
end
toc
isequal(B,C)
出力例
経過時間は0.000171秒です
経過時間は0.005295秒です
ans = 1
reshape %%%%%%%%%%%%%%
プログラム例
A = rand(1200);
tic
B = reshape(A,25,[]);
B = sum(B);
B = reshape(B,48,[]);
B = reshape(B',25,[]);
B = sum(B);
ave_B = B./(25*25);
ave_B = reshape(ave_B,48,48);
toc
tic
for n = 1:1200./25
for m = 1:1200./25
ave_C(m,n) = mean(mean(A(25*n-24:25*n, 25*m-24:25*m)));
end
end
toc
出力例
経過時間は0.003780秒です
経過時間は0.108214秒です
accumarray %%%%%%%%%%%%%%%%%%%%%
histc %%%%%%%%%%%%%%%%%%%%%%%%%%
A = rand(100,1);
tic
N1 = histc(A,0.005:0.01:0.995);
toc
tic
N2 = zeros(100,1);
for n = 1:100
N2(n) = sum(A>=n*0.01-0.005 & A
toc
isequal(N1,N2)
経過時間は0.000047秒です
経過時間は0.001292秒です
ans = 1
diff %%%%%%%%%%%%%%%%%%%%
A = rand(100,1);
tic
diff1 = diff(A);
toc
tic
diff2 = zeros(99,1);
for n = 1:99
diff2(n) = A(n+1)-A(n);
end
toc
isequal(diff1,diff2)
経過時間は0.000027秒です
経過時間は0.000242秒です
ans = 1
repmat%%%%%%%%%%%%%%%%%%%%%%%
permute %%%%%%%%%%%%%%%%%%%%%%
A = rand(100,100,100);
tic
B = permute(A,[2,3,1]);
toc
tic
C = zeros(100,100,100);
for l = 1:100
for m = 1:100
for n = 1:100
C(m,n,l) = A(l,m,n);
end
end
end
toc
isequal(B,C)
経過時間は0.011770秒です
経過時間は1.910813秒です
ans = 1
sparse %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%