使用zip
函数,Python允许循环并行遍历多个序列。
for (x,y) in zip(List1, List2):
MATLAB是否有相同的语法?如果没有,使用MATLAB同时迭代两个并行数组的最佳方法是什么?
答案 0 :(得分:15)
如果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
>>
答案 1 :(得分:6)
如果我没有弄错你在python creates a pair of the items found in list1 and list2中使用的zip函数。基本上它仍然是一个for循环添加它将从你的两个单独的列表中检索数据,而不是你必须自己做。
所以也许你最好的选择是使用标准进行循环:
for i=1:length(a)
c(i) = a(i) + b(i);
end
或与数据有关的任何内容。
如果你真的在谈论并行计算,那么你应该看一下matlab的Parallel Computing Toolbox,更具体地说是parfor
答案 2 :(得分:5)
仅在八度音阶中测试...(没有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
答案 3 :(得分:1)
我建议加入两个数组进行计算:
% assuming you have column vectors a and b
x = [a b];
for i = 1:length(a)
% do stuff with one row...
x(i,:);
end
如果您的函数可以使用向量,这将非常有用。然后,许多函数甚至可以使用矩阵,所以你甚至不需要循环。
答案 4 :(得分:0)
for (x,y) in zip(List1, List2):
应为:
>> for row = {'string' 10
>> 'property' 100 }'
>> fprintf([row{1,:} '%d\n'], row{2, :});
>> end
string10
property100
这很棘手,因为单元格大于2x2,甚至单元已转置。请尝试这个。
这是另一个例子:
>> cStr = cell(1,10);cStr(:)={'string'};
>> cNum=cell(1,10);for cnt=1:10, cNum(cnt)={cnt};
>> for row = {cStr{:}; cNum{:}}
>> fprintf([row{1,:} '%d\n'], row{2,:});
>> end
string1
string2
string3
string4
string5
string6
string7
string8
string9
string10
答案 5 :(得分:0)
如果我有两个数组al和bl,它们的维数为2,而我想遍历这个维数(例如乘以al(i)*bl(:,i)
)。然后,以下代码将起作用:
al = 1:9;
bl = [11:19; 21:29];
for data = [num2cell(al); num2cell(bl,1)]
[a, b] = data{:};
disp(a*b)
end
答案 6 :(得分:-2)
for
循环过去很慢,但现在不再适用了。
因此,矢量化并不总是奇迹般的解决方案。只需使用分析器,tic
和toc
函数即可帮助您识别可能存在的瓶颈。