大量のデータを計算するには配列処理は必須です。
しかし、プログラム言語によって記述方法に微妙な違いがあるのが間違いのもと。
ゆるゆる更新していきます。
関連メモ
python ジャンプスタート
C,perl,PHP. JavaScript,Scilab,VHDL,pythonの比較
[配列と文字列処理の比較](https://qiita.com/0x20FE/items/ b6ea768692297b721951)
関数とオブジェクトの書き方メモ
Scilab,NumPy,R行列処理の比較
##for文
配列(aDat)を順番にitemに取り出す繰り返し処理で比較します。
基数が0の処理系で順番に処理するなら、ループ変数うの初期値は0、終了はループ変数<項目数
。
逆順に処理する場合、初期値は項目数−1、終了はループ変数=0
。
このループ処理のわずわらしさは、STL(Standard Templete Language)では、抽象化されたポインタ(イテレータ)操作で統一化されている。イテレータの初期値はit=aDat.begin()
、終了条件はit!=aDat.end()
とする。逆順で処理する場合はreverse iteratorを用いる。STLではデータ集合はコンテナに抽象化され、配列、キュー、リスト、集合のソフト部品が用意されている。
SciLab,numPy,Rでは、できるだけforループは使わず、ベクトル処理を利用する。
Lang | 基数 | 項目数 | for |
---|---|---|---|
C,C++ | 0 | //C++17 * std::size() |
int a[]={1,2,3}; for(i=0;i<N;i++){//SaitoAtsushiさんのコメント参照 aDat[i]; } |
C++,STL | 0 | aDat.size() | std::vector<int> aDat; typedef std::vector<int>::iterator it; for(it=aDat.begin();it != aDat.end();++it){ *it; } |
perl | 0 | $#aDat+1 | $aDat=(1,2,3); for($i=0;$i<$#aDat+1;$i++){# $#変数名は項目数-1 aDat[i]; } |
PHP | 0 | count($aDat) | for($i=0;$i < count($aDat);$i++){ aDat[i]; } |
JavaScript | 0 | aDat.length | var aDat=[1,2,3]; for(var i=0;i < aDat.length; i++){ aDat[i]; } |
SciLab | 1 | length(aDat) | aDat=[1 2 3]; for i=1:length(aDat),aDat(i),end; |
numPy | 0 | len(aDat) # ** |
aDat=np.array([1,2,3]) for i in range(len(aDat)): aDat[i] |
R | for(i in 1:N){ } |
||
VHDL | - | G_FOO: for i in 0 to 7 generate G_XX:XX prot map(I =>X(i)); end generate; |
- SaitoAtsushiさんより
** shiracamusさんより
##foreach
配列(aDat)を順番にitemに取り出す
Rのforeachは、他と大きくことなり、処理にループ変数を割り当て、結果をリストで返す(%do%)。%dopar%を指定すると並列処理を行う。
Lang | for each リスト | for each 連想配列 |
---|---|---|
Bone Shell | for item in val1 val2;do echo $item; done | |
perl | foreach my $item (@aDat){ } |
%hDat=("a"=>1,"b"=>2); foreach my $key (keys %hDat){ $hDat{$key}; } |
PHP | $aDat=array("a","b","c"); foreach ($aDat as $item){ } |
$hDat=array("a"=>1,"b"=>2); foreach ($hDat as $key =>$item){ } |
JavaScript | var aDat=[1,2,3]; aDat.forEach(function(item){ item }); |
var hDat={"a":1, "b":2, "c":3}; Object.keys(hDat),forEach(function(key){ this[key]; },hDat); |
SciLab | for item=[1,5,7] item; end |
なし |
python | aDat=["a","b","c"] for item in aDat: item |
|
R | library(foreach) x<=foreach(i=1:4) %do% 処理(i) |
|
VHDL | なし | なし |
##文字列処理
Lang | 結合 | 比較 | 長さ | 切り出し | 配列への分割 | 配列結合 |
---|---|---|---|---|---|---|
入力 | "A","B" | 変数,定数 | "abc" | "abc de f" | "a,b,c" | "a","b","c" |
結果 | "AB" | 論理値 | 3 | "de" | "a","b","c" | "a,b,c" |
perl | $A.$B | $A eq "abc" | length "abc" | substr($A,4,2) | split(/,/,"a,b,c") | join(',',"a","b","c") |
PHP | $A.$B | strcmp($A,"abc")==0 | strlen($A) | substr($A,4,2) 注:開始,長さを指定 |
explode(",","a,b,c") | implode(("a","b","c")) |
SciLab | A + B | strcmp(a,"abc") | length("abc") | part("abc de f",5:6) 注:開始:終了位置を指定 訂正:4:6-->5:6 |
strsplit("1,2,3",","); | strcat(["a","b","c"],","); |
python | + | == | len('abc') | str[2:3] | a.split(',') | string.join(a,",") |
R | paste("A","B") | nchar("abc") | substr("abcde",2,4) 注:終了位置を指定 |
strsplit("a,b,c",",") | paste("a","b","c",sep=",") | |
JavaScript | + | === | "abc".length() | "abc".substring(1,2) | "1,2,3".split(",") | |
excel | "A"&"B" |
##SciLab関連ドキュメントリンク
install
macOSでSciLabを動かすまで
SciNoteのオートコンプリートをとめたい
実践
SciLabでCSV読み込み
SciLabでGUIを使ってみる
Mac/Windows共用scilabスクリプト未公開
SciLabでフィルタを適用する未公開
プロットメモ未公開
プロットあれこれ未公開
他の言語と比較・書き換え
Scilab (NumPy) - plotの書き方
[配列と文字列処理の比較](https://qiita.com/0x20FE/items/ b6ea768692297b721951)
関数とオブジェクトの書き方メモ
Scilab,NumPy,R行列処理の比較