una - ¿Se pueden hacer recorridos paralelos en MATLAB igual que en Python?
fijar ejes matplotlib (5)
Si no me equivoco, la función zip que usa en python crea un par de elementos encontrados en list1 y list2 . Básicamente, sigue siendo un bucle for con la adición de que recuperará los datos de las dos listas separadas para usted, en lugar de eso usted tiene que hacerlo usted mismo.
Así que tal vez su mejor opción es utilizar un estándar para el ciclo como este:
for i=1:length(a)
c(i) = a(i) + b(i);
end
o lo que sea que tengas que hacer con los datos.
Si realmente está hablando de computación paralela, entonces debería echar un vistazo a la Parallel Computing Toolbox para matlab, y más específicamente a parfor
Usando la función zip
, Python permite que los loops atraviesen múltiples secuencias en paralelo.
for (x,y) in zip(List1, List2):
¿MATLAB tiene una sintaxis equivalente? Si no, ¿cuál es la mejor manera de iterar en dos matrices paralelas al mismo tiempo utilizando MATLAB?
Probado solo en octava ... (sin licencia de matlab). Existen variaciones de arrayfun (), verifique la documentación.
#!/usr/bin/octave -qf
function result = dostuff(my_ten, my_one)
result = my_ten + my_one
endfunction
tens = [ 10 20 30 ];
ones = [ 1 2 3];
x = arrayfun(@dostuff, tens, ones);
x
Rinde ...
x =
11 22 33
Yo recomendaría unir las dos matrices para el cálculo:
% assuming you have column vectors a and b
x = [a b];
for i = 1:length(a)
% do stuff with one row...
x(i,:);
end
Esto funcionará muy bien si tus funciones pueden funcionar con vectores. Por otra parte, muchas funciones incluso pueden funcionar con matrices, por lo que ni siquiera necesitaría el ciclo.
Si xey son vectores de columna, puede hacer:
for i=[x'';y'']
# do stuff with i(1) and i(2)
end
(con vectores de fila, solo usa y
).
Aquí hay un ejemplo de ejecución:
>> 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
>>
for
bucles en MATLAB solía ser lento, pero esto ya no es cierto.
Entonces, vectorizar no siempre es la solución milagrosa. Solo use las funciones profiler y tic
and toc
para ayudarlo a identificar posibles cuellos de botella.