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.