arrays matlab indexing

arrays - En una asignación A(:)=B, el número de elementos en A y B debe ser el mismo



matlab indexing (1)

Cuando intento ejecutar mi código, por ejemplo

for ii= 1:10 output(ii)=rand(3); end

Me sale el error

In an assignment A(:) = B, the number of elements in A and B must be the same

o

In an assignment A(I) = B, the number of elements in B and I must be the same.

¿Qué significa este error? ¿Cuál es el enfoque para deshacerse de él?


Este error se produce porque está intentando llenar un fragmento variable con más (o menos) valores que su tamaño. En otras palabras, tiene una declaración A(:)=B size(A(:)) A(:)=B en donde el size(A(:)) es diferente al size(B) .

En el ejemplo en la pregunta, rand(3) devuelve una matriz 3x3 , sin embargo, la output(ii) es solo un valor único (incluso si la output puede ser mayor, la output(ii) es solo un valor único de output ), por lo tanto, el El valor devuelto por rand(3) no cabe dentro de la output .

Para resolver este problema, debe cambiar el tamaño de la variable de output , de modo que tenga espacio para todos los resultados.

Hay 2 formas de hacer esto. Una de ellas es mediante la creación de una matriz que se ajuste al rendimiento, por ejemplo, output=zeros(3,3,10) .

Entonces podemos cambiar el código a

for ii= 1:10 output(:,:,ii)=rand(3); end

Alternativamente, puede llenar la output como una matriz de celdas . Esto es particularmente útil cuando el retorno de la función cambia de tamaño cada vez, por ejemplo, rand(ii);

En ese caso, lo siguiente funcionaría

for ii= 1:10 output{ii}=rand(ii); end

Es probable que, a diferencia del ejemplo en la pregunta, en el caso real no conozca el tamaño de lo que devuelve la salida, por lo tanto, no sabe cuál de las dos opciones usar para arreglar su código.

En una posible forma de aprender eso, está activando la ayuda de depuración cuando el código dbstop if error , escribiendo dbstop if error en su línea de comando. Esto activará una detención de depuración cuando MATLAB arroje un error, y puede escribir size(rand(ii)) y size(output(ii)) para ver los tamaños de ambos.

A menudo, leer la documentación de la función que se usa también ayuda, para ver si son posibles diferentes tamaños.

Dicho esto, la segunda opción, las matrices de celdas, siempre garantizará que todo encaje. Sin embargo, las matrices son generalmente más rápidas y fáciles de usar en MATLAB, por lo tanto, debe poder buscar la solución basada en matrices si puede.