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

Cuando bash 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 debe a que está tratando de completar un fragmento variable con más (o menos) valores que su tamaño. En otras palabras, tiene un enunciado A(:)=B size(A(:)) A(:)=B en donde el size(A(:)) es diferente al size(B) .

En el ejemplo de la pregunta, rand(3) devuelve una matriz de 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 de output ), por lo tanto 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 , para 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 ajusta a la statement, 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 completar el 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 de la pregunta, en el caso real no se conozca el tamaño de lo que devuelve la salida, por lo que no se sabe cuál de las dos opciones usar para corregir el código.

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

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

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