このzip
関数を使用すると、Python は for ループが複数のシーケンスを並行してトラバースできるようにします。
for (x,y) in zip(List1, List2):
MATLAB には同等の構文がありますか? そうでない場合、MATLAB を使用して 2 つの並列配列を同時に反復処理する最良の方法は何ですか?
x と y が列ベクトルの場合、次のことができます。
for i=[x';y']
# do stuff with i(1) and i(2)
end
(行ベクトルでは、 と を使用するだけx
ですy
)。
実行例を次に示します。
>> x=[1 ; 2; 3;]
x =
1
2
3
>> y=[10 ; 20; 30;]
y =
10
20
30
>> for i=[x';y']
disp(['size of i = ' num2str(size(i)) ', i(1) = ' num2str(i(1)) ', i(2) = ' num2str(i(2))])
end
size of i = 2 1, i(1) = 1, i(2) = 10
size of i = 2 1, i(1) = 2, i(2) = 20
size of i = 2 1, i(1) = 3, i(2) = 30
>>
オクターブでのみテストされています... (matlab ライセンスなし)。arrayfun() のバリエーションが存在します。ドキュメントを確認してください。
dostuff = @(my_ten, my_one) my_ten + my_one;
tens = [ 10 20 30 ];
ones = [ 1 2 3];
x = arrayfun(dostuff, tens, ones);
x
収量...
x =
11 22 33
私が間違っていなければ、Python で使用する zip 関数は list1 と list2 にあるアイテムのペアを作成します。基本的には、自分で行う必要がある代わりに、2 つの個別のリストからデータを取得することを追加した for ループのままです。
したがって、おそらく最良のオプションは、次のような標準の for ループを使用することです。
for i=1:length(a)
c(i) = a(i) + b(i);
end
またはあなたがデータと関係があるものなら何でも。
本当に並列計算について話しているのであれば、Matlab のParallel Computing Toolbox、より具体的にはparforを見てください。
計算のために 2 つの配列を結合することをお勧めします。
% assuming you have column vectors a and b
x = [a b];
for i = 1:length(a)
% do stuff with one row...
x(i,:);
end
関数がベクトルで動作する場合、これはうまく機能します。繰り返しになりますが、多くの関数は行列でも機能するため、ループは必要ありません。
for
MATLAB のループは以前は遅かったのですが、今はそうではありません。
そのため、ベクトル化が常に奇跡的な解決策であるとは限りません。プロファイラーtic
とtoc
関数を使用するだけで、ボトルネックの可能性を特定できます。