可以在MATLAB中完成并行遍历,就像在Python中一样吗?

python arrays matlab for-loop

4402 观看

6回复

46 作者的声誉

使用该zip函数,Python允许循环并行遍历多个序列。

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

MATLAB有相同的语法吗?如果没有,使用MATLAB同时迭代两个并行数组的最佳方法是什么?

作者: Jason 的来源 发布者: 2008 年 9 月 8 日

回应 6


6

11210 作者的声誉

如果我没弄错你在python中使用的zip函数会创建一对list1和list2中找到的项目。基本上它仍然是一个for循环添加它将从您检索两个单独的列表中的数据,而不是你必须自己做。

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

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

或者与数据有关的任何事情。

如果你真的在谈论并行计算,那么你应该看看用于matlab 的并行计算工具箱,更具体地说是在parfor

作者: sven 发布者: 2008 年 9 月 8 日

5

201 作者的声誉

仅在八度音阶中测试...(没有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
作者: DMC 发布者: 2008 年 9 月 9 日

15

1810 作者的声誉

如果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
>> 
作者: mattiast 发布者: 2008 年 9 月 15 日

-2

0 作者的声誉

for MATLAB中的循环过去很慢,但这不再适用。

因此,矢量化并不总是奇迹解决方案。只需使用分析器tictoc功能来帮助您识别可能的瓶颈。

作者: Vincent 发布者: 2008 年 9 月 26 日

1

6708 作者的声誉

我建议加入两个数组进行计算:

% assuming you have column vectors a and b
x = [a b];

for i = 1:length(a)
    % do stuff with one row...
    x(i,:);
end

如果您的函数可以使用向量,这将非常有用。然后,许多函数甚至可以使用矩阵,所以你甚至不需要循环。

作者: bastibe 发布者: 2008 年 10 月 20 日

0

1 作者的声誉

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

应该是例如:

for row = {"x1" "y1"
            "x2" "y2"}'
    x = row{1,:};
    y = row{2,:};
end

(我不知道你的数据结构。)这很棘手,因为单元格大于2x2,并且单元格甚至是转置的。请试试这个。

作者: Sean 发布者: 2019 年 2 月 1 日
32x32