MATLAB能像Python一样进行并行遍历吗?

14 投票
7 回答
8201 浏览
提问于 2025-04-11 09:19

在Python中,使用zip这个函数,可以让我们在一个循环里同时遍历多个列表。

比如,像这样写:for (x,y) in zip(List1, List2):

那么,MATLAB有没有类似的写法呢?如果没有,使用MATLAB时,有什么好的方法可以同时遍历两个数组呢?

7 个回答

6

如果我没记错的话,你在Python中使用的zip函数是用来把list1和list2中的元素配对的。简单来说,它其实还是一个for循环,只不过它会帮你从两个不同的列表中提取数据,而不需要你自己去做这件事。

所以,也许你最好的选择是使用一个标准的 for循环,像这样:

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

或者你可以对数据做其他的操作。

如果你真的是在谈论并行计算,那么你应该看看Matlab的并行计算工具箱,更具体地说,可以关注一下parfor

8

这个内容只在Octave上测试过……(没有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
20

如果 x 和 y 是列向量,你可以这样做:

for i=[x';y']
# do stuff with i(1) and i(2)
end

如果是行向量,只需要用 xy 就可以了。

下面是一个运行的例子:

>> 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
>> 

撰写回答