MATLAB能像Python一样进行并行遍历吗?
在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
如果是行向量,只需要用 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
>>