valor una programacion posicion matriz matrices llenar identidad extraer elementos datos columna almacenar agregar arrays matlab indexing

arrays - una - ¿Por qué Matlab tiene 1 indexación basada



matriz identidad en matlab (2)

Solía ​​programar en Java y Python antes, pero recientemente comencé a usar MATLAB para muchas cosas (específicamente algoritmos de visión artificial).

Sin embargo, MATLAB tiene indexación de matrices comenzando desde 1 en lugar de 0, que es la norma en casi todos los lenguajes de programación que he encontrado hasta ahora.

La razón por la que la indexación basada en 0 tenía sentido para mí era la siguiente: en cada procesador que he visto, el índice de direcciones comienza con 0x00000000 en un procesador de 8 bits y si quiero guardar 5 números, se almacenan en la dirección 0x00000000 a 0x00000004. Por lo tanto, tiene sentido tener una indexación desde 0 en los lenguajes de programación.

Mientras buscaba esta pregunta, encontré Lista de 1 lenguajes de programación indexados? y http://en.wikipedia.org/wiki/Comparison_of_programming_languages_(array) para ser útil.

Para mí no es una notación muy conveniente, tal vez porque antes codifiqué en otros idiomas. Pero todavía no entiendo por qué MATLAB (e incluso Julia ahora) tiene una indexación de matriz basada en 1 y qué ventajas proporciona. ¿Alguien puede enumerar las ventajas?


¿Por qué tiene indexación basada en 1? Razones históricas. ( Cleve Moler así lo decidió). Probablemente tiene que ver con que la indexación basada en 1 sea la convención para la notación matricial.

¿Por qué no implementa la indexación basada en 0 también? ¿Alguna buena lectura de luz ?

En particular, busque comentarios de Cleve Moler (el creador de MATLAB) y Steve Lord (ingeniero de MathWorks). Después de mucho intercambio, el razonamiento básico (al menos en 2001) para no implementar una indexación complementaria basada en 0 no fue por ninguna razón filosófica o de compatibilidad, aunque comenzó como un argumento de compatibilidad con versiones anteriores, sino porque requeriría demasiado demasiado esfuerzo. para actualizar las funciones incorporadas de MATLAB:

Estoy de acuerdo en que sería posible agregar indexación basada en cero a MATLAB, usando ya sea nueva notación o un objeto que sobrecargó toda nuestra notación de indexación existente. Podría ser compatible con versiones anteriores en el sentido de que el código antiguo que no conocía ni utilizaba las nuevas cosas seguiría funcionando.

Pero aquí está el punto clave: ninguno de nuestro código existente funcionaría con el nuevo objeto. No podrías trazarlo; no podrías imprimirlo; ciertamente no podrías hacer ninguna operación matricial con él. Sí, con el tiempo, todo podría reescribirse para manejar la extensión, pero eso es lo que queremos evitar. Sería como la radio AM y FM: dos sistemas que viven en la misma caja, pero con tecnología subyacente separada e independiente.

- Cleve Moler
[email protected]

Traducción: No quieren escribir todas las rutinas nuevas de parcelas, impresiones, etc.


Matlab pretende ser una forma de hacer que la funcionalidad de los lenguajes de programación sea accesible para las personas que no han aprendido a codificar. Tener índices que comiencen en 0 puede ser una fuente común de errores para las personas que no están familiarizadas con la programación, y el objetivo de Matlab es permitir que las personas apliquen las matemáticas que entienden a los problemas que necesitan resolver, sin mucho conocimiento adicional.

La mayoría de las tareas para las que se utiliza Matlab, por ejemplo, física e ingeniería, utilizan la convención de índices que comienza en 1 en la mayoría de la literatura, por lo que las personas que trabajan en estos campos no necesitan convertir sus algoritmos restando 1 de todo.

Además de esto, Matlab es la abreviatura de "laboratorio de matriz", y en matemáticas, la convención típicamente es indexar matrices comenzando en 1, así que tiene sentido que sigan esta convención.

La lógica de por qué tiene sentido comenzar en 0 es perfectamente buena, pero es el propósito de un lenguaje de alto nivel como matlab ocultar aspectos como estos que el usuario no necesita saber.