Quiero crear un bucle que iterará sobre varias cadenas, pero no puede hacerlo en Matlab.bucle foreach con cadenas en Matlab
Lo que funciona es:
for i=1:3
if (i==1)
b='cow';
elseif (i==2)
b='dog';
else
b='cat';
end
disp(b);
end
y el resultado es:
cow
dog
cat
Pero lo que quiero es algo más elegante que se verá así:
for i=['cow','dog','cat']
disp (i);
end
y dar la mismo resultado.
¿Existe una opción en Matlab para hacer esto?
ADEMÁS:
necesito las palabras como cadenas más adelante a utilizar y no sólo para mostrar (la disp
fue sólo como un ejemplo). He tratado de utilizar matrices de células en mi verdadero programa:
clear all;
close all;
clc;
global fp_a
global TEST_TYPE
global SHADE_METHODE
for fp_a=11:24
for shade={'full','fast'}
SHADE_METHODE=shade(1);
for test={'bunny','city'}
TEST_MODE=test(1);
fprintf ('fp_a:%d | test: %s | shade: %s',fp_a,TEST_TYPE,SHADE_METHODE);
ray_tracing;
end
end
end
No funciona como los valores permanecen como células y no las cadenas me sale el mensaje de error:
??? Error al usar ==> fprintf La función no está definida para las entradas de 'celda'.
* -Realmente no necesito el fprintf
Solo lo uso para verificar que los valores sean correctos.
** - ray_tracing
es mi código que utiliza los valores de las cadenas
El problema en la adición es solo la sintaxis. Necesitas usar las llaves - 'test {1}' - para extraer la matriz char de la celda, no paréntesis normales - 'test (1)' - que solo selecciona la primera celda de la matriz, sin hacer nada aquí. Comprueba el código de ejemplo de Oli nuevamente; nota que está usando las llaves en 'i {1}'. (Además, no uses globales si puedes evitarlo).) –
Debería usar 'SHADE_METHODE = shade {1};' en lugar de 'SHADE_METHODE = shade (1);' – Oli
posible duplicado de [¿Hay algún foreach en MATLAB? Si es así, ¿cómo se comporta si los datos subyacentes cambian?] (Http://stackoverflow.com/questions/408080/is-there-a-foreach-in-matlab-if-so-how-does-it-behave -if-the-underlying-data-c) –