[ACCEPTED]-Can parallel traversals be done in MATLAB just as in Python?-for-loop
If x and y are column vectors, you can do:
for i=[x';y']
# do stuff with i(1) and i(2)
end
(with 2 row vectors, just use x
and y
).
Here is an 1 example run:
>> 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
>>
Tested only in octave... (no matlab license). Variations 1 of arrayfun() exist, check the documentation.
dostuff = @(my_ten, my_one) my_ten + my_one;
tens = [ 10 20 30 ];
ones = [ 1 2 3];
x = arrayfun(dostuff, tens, ones);
x
Yields...
x =
11 22 33
If I'm not mistaken the zip function you 10 use in python creates a pair of the items found in list1 and list2. Basically it still is a 9 for loop with the addition that it will 8 retrieve the data from the two seperate 7 lists for you, instead that you have to 6 do it yourself.
So maybe your best option 5 is to use a standard for loop like this:
for i=1:length(a)
c(i) = a(i) + b(i);
end
or whatever 4 you have to do with the data.
If you really 3 are talking about parallel computing then 2 you should take a look at the Parallel Computing Toolbox for matlab, and 1 more specifically at parfor
I would recommend to join the two arrays 5 for the computation:
% assuming you have column vectors a and b
x = [a b];
for i = 1:length(a)
% do stuff with one row...
x(i,:);
end
This will work great 4 if your functions can work with vectors. Then 3 again, many functions can even work with 2 matrices, so you wouldn't even need the 1 loop.
for (x,y) in zip(List1, List2):
should be for example:
>> for row = {'string' 10
>> 'property' 100 }'
>> fprintf([row{1,:} '%d\n'], row{2, :});
>> end
string10
property100
This is tricky because 3 the cell is more than 2x2, and the cell 2 is even transposed. Please try this.
And 1 this is another example:
>> 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
If I have two arrays al and bl with same 3 dimension No 2 size and I want to iterate 2 through this dimension (say multiply al(i)*bl(:,i)
). Then 1 the following code will do:
al = 1:9;
bl = [11:19; 21:29];
for data = [num2cell(al); num2cell(bl,1)]
[a, b] = data{:};
disp(a*b)
end
More Related questions
We use cookies to improve the performance of the site. By staying on our site, you agree to the terms of use of cookies.