xlabel tag matlab variables naming-conventions

xlabel - tag plot matlab



Usando i y j como variables en Matlab (9)

A menos que sea un usuario muy confundido, creo que hay muy poco riesgo en el uso de nombres de variables i y j y los uso con regularidad. No he visto ninguna indicación oficial de que esta práctica deba evitarse.

Si bien es cierto que sombrear la unidad imaginaria podría causar cierta confusión en algún contexto, como se menciona en otras publicaciones, en general, simplemente no lo veo como un problema importante. Hay muchas más cosas confusas que puedes hacer en MATLAB, por ejemplo, definir false=true

En mi opinión, la única vez que probablemente deberías evitarlos es si tu código trata específicamente con números imaginarios.

i y j son nombres de variables muy populares (ver, por ejemplo, esta pregunta y esta ).

Por ejemplo, en bucles:

for i=1:10, % do something... end

Como índices en la matriz:

mat( i, j ) = 4;

¿Por qué no deberían usarse como nombres de variables en Matlab?


Como se describe en otras respuestas, el uso de i en el código general no se recomienda por dos motivos:

  • Si desea usar el número imaginario, puede confundirse con un índice o sobrescribirlo
  • Si lo usa como índice, puede sobreestimular o confundirse con el número imaginario

Según lo sugerido: 1i y ii son recomendados. Sin embargo, aunque ambas son desviaciones de i , no es muy bueno utilizar ambas alternativas juntas.

Aquí hay un ejemplo de por qué (personalmente) no me gusta:

val2 = val + i % 1 val2 = val + ii % 2 val2 = val + 1i % 3

Uno no será fácilmente leído por dos o tres, pero dos y tres se parecen entre sí.

Por lo tanto, mi recomendación personal sería: en caso de que a veces trabajes con código complejo, siempre usa 1i combinado con una variable de bucle diferente.

Ejemplos de índices de letra única que, si no utiliza muchas variables de bucle y letras, son suficientes: t , u , k y p

Ejemplo de índices más largos: i_loop , step , walk y t_now

Por supuesto, esto también es una cuestión de gusto personal, pero no debería ser difícil encontrar índices de uso que tengan un significado claro sin crecer demasiado tiempo.


Cualquier código no trivial contiene múltiples bucles for , y las mejores prácticas recomiendan que use un nombre descriptivo indicativo de su propósito y alcance. Por tiempos inmemoriales (ya menos que su script de 5-10 líneas no lo guarde), siempre he estado usando nombres de variables como idxTask , idxAnotherTask e idxSubTask etc.

O al menos doblando la primera letra de la matriz, está indexando, por ejemplo, ss para indexar subjectList , tt para indexar taskList , pero no ii o jj lo que no me ayuda a identificar sin esfuerzo qué matriz están indexando de mis múltiples loops .


En versiones anteriores de MATLAB, solía haber una buena razón para evitar el uso de i y j como nombres de variables: las primeras versiones de MATLAB JIT no eran lo suficientemente inteligentes como para decir si las estaban utilizando como variables o como unidades imaginarias, y por lo tanto, desactivaría muchas otras optimizaciones posibles.

Por lo tanto, su código sería más lento solo por la presencia de i y j como variables, y se aceleraría si los cambiara a otra cosa. Es por eso que, si lee mucho código de MathWorks, verá que ii y jj usan bastante ampliamente como índices de bucle. Durante un tiempo, MathWorks incluso podría haber aconsejado extraoficialmente a las personas que lo hicieran (aunque siempre aconsejan oficialmente a las personas que programen la elegancia / mantenibilidad más que a lo que hace el JIT actual, ya que es un objetivo móvil en cada versión).

Pero eso fue hace mucho tiempo, y hoy en día es un tema "zombie" que es mucho menos importante de lo que mucha gente todavía piensa, pero se niega a morir.

En cualquier versión reciente, es realmente una preferencia personal si se usan i y j como nombres de variables o no. Si trabajas mucho con números complejos, es posible que desees evitar i y j como variables, para evitar cualquier pequeño riesgo potencial de confusión (aunque también puedes / en lugar de eso quieres usar solo 1i o 1j para incluso menos confusión, y un poco mejor rendimiento).

Por otro lado, en mi trabajo típico nunca trato con números complejos, y encuentro que mi código es más legible si me siento libre de usar i y j como índices de bucle.

Veo muchas respuestas aquí que dicen que no se recomienda ... sin decir quién lo está recomendando. Aquí está el alcance de las recomendaciones reales de MathWorks, de la documentación de la versión actual para i :

Como i es una función, puede anularse y usarse como una variable. Sin embargo, es mejor evitar el uso de i y j para nombres de variables si tiene la intención de usarlos en aritmética compleja. [...] Para mayor velocidad y robustez, puede reemplazar el complejo i y j por 1i.


Es una buena práctica evitar las variables j para evitar confusiones sobre que sean variables o la unidad imaginaria.

Personalmente, sin embargo, utilizo i y j como variables con bastante frecuencia como el índice de bucles cortos. Para evitar problemas en mi propio código, sigo otra buena práctica con respecto a i y j : no los use para denotar números imaginarios. De hecho, la propia documentación de Matlab dice :

Para mayor velocidad y robustez, puede reemplazar el complejo i y j por 1i .

Entonces, en lugar de evitar dos nombres de variables muy comunes debido a un conflicto potencial, soy explícito sobre los números imaginarios. También hace que mi código sea más claro. Cada vez que veo 1i , sé que representa sqrt(-1) porque no podría ser una variable.


La confusión con la unidad imaginaria ha sido bien tratada aquí, pero hay algunas otras razones más prosaicas por las cuales estos y otros nombres de variables de una sola letra a veces se desalientan.

  1. MATLAB específicamente: si está utilizando un codificador para generar código fuente de C ++ a partir de su código MATLAB (no, es horrible), entonces se le advierte explícitamente que no vuelva a utilizar las variables debido a posibles conflictos de tipeo.

  2. En general, y dependiendo de su IDE, un nombre de variable de una sola letra puede causar estragos con los resaltadores y buscar / reemplazar. MATLAB no sufre de esto y creo que Visual Studio no ha tenido problemas durante un tiempo, pero los estándares de codificación C / C ++ como MISRA, etc. tienden a aconsejarlos.

Por mi parte, evito todas las variables de una sola letra, a pesar de las ventajas obvias para la implementación directa de fuentes matemáticas. Se requiere un pequeño esfuerzo extra los primeros cientos de veces que lo haces, pero después de eso dejas de notarlo, y las ventajas cuando tú o algún otro pobre alma vienen a leer tu código son legión.


Por defecto, i y j representan la unidad imaginaria. Entonces, desde el punto de vista de MATLAB, usar i como variable es de alguna manera como usar 1 como variable.



Se señaló que 1i es una forma aceptable e inequívoca de escribir sqrt(-1) y que, como tal, no es necesario evitar el uso de i . Por otra parte, como señaló Dennis ( https://.com/a/14893729/1967396 ), puede ser difícil ver la diferencia entre 1i y ii . Mi sugerencia: use 1j como la constante imaginaria cuando sea posible. Es el mismo truco que emplean los ingenieros eléctricos: usan j para sqrt(-1) porque i ya he tomado por current .

Personalmente nunca uso i y j ; Utilizo ii y jj como variables de indexación taquigráficas, (y kk, ll, mm, ...) y 1j cuando necesito usar números complejos.