14

このzip関数を使用すると、Python は for ループが複数のシーケンスを並行してトラバースできるようにします。

for (x,y) in zip(List1, List2):

MATLAB には同等の構文がありますか? そうでない場合、MATLAB を使用して 2 つの並列配列を同時に反復処理する最良の方法は何ですか?

4

7 に答える 7

19

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
>> 
于 2008-09-15T19:20:15.590 に答える
8

オクターブでのみテストされています... (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
于 2008-09-09T02:32:46.670 に答える
6

私が間違っていなければ、Python で使用する zip 関数は list1 と list2 にあるアイテムのペアを作成します。基本的には、自分で行う必要がある代わりに、2 つの個別のリストからデータを取得することを追加した for ループのままです。

したがって、おそらく最良のオプションは、次のような標準の for ループを使用することです。

for i=1:length(a)
  c(i) = a(i) + b(i);
end

またはあなたがデータと関係があるものなら何でも。

本当に並列計算について話しているのであれば、Matlab のParallel Computing Toolbox、より具体的にはparforを見てください。

于 2008-09-08T11:34:08.047 に答える
2

計算のために 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

関数がベクトルで動作する場合、これはうまく機能します。繰り返しになりますが、多くの関数は行列でも機能するため、ループは必要ありません。

于 2008-10-20T14:22:59.297 に答える
-2

forMATLAB のループは以前は遅かったのですが、今はそうではありません。

そのため、ベクトル化が常に奇跡的な解決策であるとは限りません。プロファイラーtictoc関数を使用するだけで、ボトルネックの可能性を特定できます。

于 2008-09-26T11:31:27.207 に答える