« Juliaやってみよう。二日目。Juliaのアップデート、IJulia | トップページ | Juliaやってみよう。四日目。@timeでプロファイリング »

2017年7月15日 (土)

Juliaやってみよう。三日目。MATLABコードを翻訳してみる。

まあ、多少慣れてきたのでMATLABのコードを翻訳してみる。

お題は、Izhikevichモデルの有名な1000個のニューロンのシミュレーションするモデル。短いし、まあ、こーゆーことをやるための言語だし。

MATLABのオリジナルはこちら。

% Created by Eugene M. Izhikevich, February 25, 2003
% Excitatory neurons    Inhibitory neurons
Ne=800;                 Ni=200;
re=rand(Ne,1);          ri=rand(Ni,1);
a=[0.02*ones(Ne,1);     0.02+0.08*ri];
b=[0.2*ones(Ne,1);      0.25-0.05*ri];
c=[-65+15*re.^2;        -65*ones(Ni,1)];
d=[8-6*re.^2;           2*ones(Ni,1)];
S=[0.5*rand(Ne+Ni,Ne),  -rand(Ne+Ni,Ni)];

v=-65*ones(Ne+Ni,1);    % Initial values of v
u=b.*v;                 % Initial values of u
firings=[];             % spike timings

for t=1:1000            % simulation of 1000 ms
  I=[5*randn(Ne,1);2*randn(Ni,1)]; % thalamic input
  fired=find(v>=30);    % indices of spikes
  firings=[firings; t+0*fired,fired];
  v(fired)=c(fired);
  u(fired)=u(fired)+d(fired);
  I=I+sum(S(:,fired),2);
  v=v+0.5*(0.04*v.^2+5*v+140-u+I); % step 0.5 ms
  v=v+0.5*(0.04*v.^2+5*v+140-u+I); % for numerical
  u=u+a.*(b.*v-u);                 % stability
end;
plot(firings(:,1),firings(:,2),'.');

一晩格闘した結果、小生なりのJuliaへの翻訳がこちら。 オリジナルにはないVmを追加している。

using PyPlot

Ne = 800; Ni = 200;
re = rand(Ne, 1); ri = rand(Ni, 1);
a = [0.02 * ones(Ne, 1); 0.02 * ones(Ni, 1)]
b = [0.2 * ones(Ne, 1);  0.25-0.05*ri]
c = [-65 + 15 * re .^ 2; -65*ones(Ni, 1)]
d = [8-6*re .^ 2; 2*ones(Ni,1)]
S = hcat(0.5 * rand(Ne+Ni,Ne),  -rand(Ne+Ni,Ni));

v=-65*ones(Ne+Ni,1);    # Initial values of v
u=b.*v;                 # Initial values of u
firings=[];             # spike timings

Vm = [];                # added

for t=1:1000            # simulation of 1000 ms
  I=[5*randn(Ne,1);2*randn(Ni,1)]; # thalamic input
  fired=find(v.>= 30);    # indices of spikes
  firings=[firings; hcat(t+0*fired, fired)];
  v[fired]=c[fired];
  u[fired]=u[fired]+d[fired];
  I=I+sum(S[:,fired], 2);
  v=v+0.5*(0.04*v.^2+5*v+140-u+I); # step 0.5 ms
  v=v+0.5*(0.04*v.^2+5*v+140-u+I); # for numerical
  u=u+a.*(b.*v-u);                 # stability
  Vm = [Vm; v'];
end;

scatter(firings[:,1], firings[:,2], s=1);

いやー、なんかほとんどおんなじだ。JuliaはMATLABと同じでインデックスが1から始まるし、MATLABキラーだな。forループがendで終わってPythonよりMATLAB感がつよい。

PythonでNumpy使い始めたら、MATLABはv(2:5)とかベクターをスライスするときも括弧使うのが、ちょっと変な仕様だと気づいたけど、JuliaもNumpyのようにv[2:5]とスクエアブラケットでのインデックシングでしっくり来る。納得の変更・改善ばかり。後出しジャンケンは強い。

import numpyってしてないのに、素のJuliaでrandとか、onesとか使えるのがすごい。こういうアレイとかも実装はjuliaでJITまでついてくるんだからすごいな。pypyプロジェクトがnumpypyのRPythonでの実装に数年かかっているのをみると、juliaのアプローチの優秀さが分かる。numpypyは99%実装できたみたいだけど、まだ遅いので使い道ない・・。 numpyでいうvstackとかhstackはvcat, hcatらしい。

GRではscatterがよくわからなかったのでPyPlotでプロットした出力がこちら。

Izhikevich_plot

上のコードではVmはプロットしてないけど、するならこんな感じ。。

plot(Vm[:,32])
ylim([-90,100]);

ylimとかnumpyそのまま。

« Juliaやってみよう。二日目。Juliaのアップデート、IJulia | トップページ | Juliaやってみよう。四日目。@timeでプロファイリング »

Python」カテゴリの記事

Julia」カテゴリの記事

コメント

https://www.valentinosshoes.us.org/
http://www.pandorarings.us.com/
https://www.newjordansshoes.us.com/
https://www.airjordan4s.us/
https://www.nikesoutletstoreonlineshopping.us.com/
https://www.jordan14.us.com/
https://www.nikeairmax98.us/
https://www.jordan9.us.com/
https://www.airjordan3s.us/
https://www.monclerstoreoutlet.us.com/
https://www.airjordansneakers.us.com/
https://www.yeezys-shoes.us.com/
https://www.pandorajewellery.us.com/
https://www.ferragamos.us.org/
https://www.jordans11.us.com/
https://www.nmds.us.com/
https://www.pandoras.us.com/
https://www.airjordan11s.us.com/
https://www.jordan10.us.com/
https://www.outletnikestore.us.com/
https://www.jordanretro11mens.us/
https://www.ferragamo-outlets.us/
https://www.jordan1.us.com/
https://www.nikeairforce1.us.org/
https://www.pandorajewelryofficialsite.us.com/
https://www.airjordan5.us/
https://www.jordanshoess.us.com/
https://www.jordan-retro5.us/
https://www.red-bottomsshoes.us.com/
https://www.pandoraringssite.us/
https://www.newjordan11.us/
https://www.new-jordans.us.com/
https://www.jordan11ssneakers.us/
https://www.jordan11low.us.com/
https://www.fjallraven-kanken.us.com/
https://www.balenciagas.us.org/
https://www.jordansretro3.us/
https://www.fitflopsclearance.us.com/
https://www.nikeshoes-cheap.us.com/
https://www.goldengoosessneakers.us.com/
https://www.redbottomshoeslouboutin.us.com/
https://www.air-jordanssneakers.us/
https://www.monclerjacketsstore.us.com/
https://www.jamesharden-shoes.us.org/
https://www.monclervest.us.com/
https://www.jordan-8.us/
https://www.jordanscheapshoes.us/
https://www.goldengoosemidstar.us.com/
https://www.goldengooseoutletfactory.us.com/
https://www.jacketsmoncleroutlet.us.com/
https://www.monclerjacket.us.org/
https://www.goldensgoose.us.com/
https://www.air-jordan12.us/
https://www.nike-airmax2018.us.com/
https://www.monclerstores.us.com/
https://www.pandoraonline.us/
https://www.adidasnmdr1.us.org/
https://www.nikeofficialwebsite.us.com/
https://www.airmax270.us.org/
https://www.jordan11red.us.com/
https://www.nikesales.us.com/
https://www.yeezys-shoes.us.org/
https://www.pandorajewelryofficial-site.us/
https://www.louboutinsshoes.us.com/
https://www.canadapandoracharms.ca/
https://www.jordansneakerss.us/
https://www.nikesnkrs.us.com/
https://www.shoes-jordan.us.com/
https://www.kyrieirving-shoes.us.org/
https://www.jordans-4.us/
https://www.airmax-95.us.com/
https://www.pandorasjewelry.us.com/
https://www.moncler-outletjackets.us.com/
https://www.jordan-retro6.us/
https://www.jordan13s.us/
https://www.adidasyeezysshoes.us.com/
https://www.yeezy.us.org/
https://www.newnikeshoes.us.com/
https://www.jordanretro-11.us.com/
https://www.mensnikeshoes.us.com/
https://www.jordans4retro.us/
https://www.nikeair-maxs.us.com/
https://www.jordan12retros.us/
https://www.pandoracanadajewelry.ca/
https://www.balenciagatriples.us.org/
https://www.air-jordan6.us/
https://www.pandora-braceletcharms.us/
https://www.jordans5.us/
https://www.goldengoosesales.us.com/
https://www.yeezyonline.us.com/
https://www.soccercleats.us.com/
http://www.yeezys.com.co/
https://www.nikeshoesforwomens.us.com/
https://www.ggdbshoes.us.com/
https://www.nikeoutletshoes.us.com/
https://www.pandorascharms.us.com/
https://www.fitflop-shoes.us.org/
https://www.nikeairjordan.us.com/
https://www.air-jordans11.us.com/
https://www.air-max90.us.com/
https://www.shoeslouboutin.us.com/
https://www.goldengoosesneakerss.us.com/
https://www.jordan-shoesformen.us.com/
https://www.monclercom.us.com/
https://www.retro-jordans.us/
https://www.nikeshoesoutletfactory.us.com/
https://www.goldengooseshoess.us.com/
https://www.huarachesnike.us.com/
https://www.pandorasjewelry.ca/
https://www.nikeoutletstoresonlineshopping.us.com/
https://www.jameshardenshoes.com.co/
https://www.airforceoneshoes.us.com/
https://www.birkin-bag.us.com/
https://www.nike--shoes.us.com/
https://www.air-jordansneakers.us/
https://www.jordanretros.us.com/
https://www.sneakersgoldengoose.us.com/
https://www.retrosairjordan.us/
https://www.jordans-sneakers.us.com/
https://www.jordansretro12.us/
https://www.airjordan6rings.us/
https://www.jordan-12.us.com/
https://www.jordanshoesretro.us.com/
https://www.airjordanretro11.us.com/
https://www.outletgoldengoose.us.com/
https://www.jordan-4.us.com/
https://www.jordans-11.us/
https://www.eccos.us.com/
https://www.jordan11winlike96.us/
https://www.redbottomslouboutin.us.org/
https://www.ggdbsneakers.us.com/
https://www.moncleroutletstoreonline.us.com/
https://www.ggdbs.us.com/
https://www.nikesfactory.us.com/
https://www.jordan11sshoes.us/
https://www.retrosjordans.us/

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: Juliaやってみよう。三日目。MATLABコードを翻訳してみる。:

« Juliaやってみよう。二日目。Juliaのアップデート、IJulia | トップページ | Juliaやってみよう。四日目。@timeでプロファイリング »

しろののツイッタータイムライン(凍結中)

オススメたち

2021年7月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

はてブ

無料ブログはココログ