尝试运行我的代码时,例如
for ii= 1:10
output(ii)=rand(3);
end
我收到错误
In an assignment A(:) = B, the number of elements in A and B must be the same
或
In an assignment A(I) = B, the number of elements in B and I must be the same.
这个错误是什么意思?摆脱它的方法是什么?
答案 0 :(得分:5)
出现此错误的原因是您尝试使用比其大小更多(或更少)的值填充变量块。换句话说,您有A(:)=B
与size(A(:))
不同的声明size(B)
。
在问题的示例中,rand(3)
会返回3x3
矩阵,但output(ii)
只是一个值(即使output
可能更大,{{ 1}}只是output(ii)
)的单个值,因此output
返回的值不适合rand(3)
。
为了解决这个问题,您需要更改output
变量的大小,以便有足够的空间来容纳所有结果。
有两种方法可以做到这一点。其中之一是创建适合回报的矩阵,例如: output
。
然后我们可以将代码更改为
output=zeros(3,3,10)
或者,您可以将for ii= 1:10
output(:,:,ii)=rand(3);
end
填充为单元格数组。当函数的返回每次改变大小时,这尤其有用,例如, output
在这种情况下,以下方法可行
rand(ii);
可能与问题中的示例不同,在实际情况下,您不知道输出返回的大小,因此您不知道用于修复代码的两个选项中的哪一个。
在可能的学习方法上,通过在命令行中键入for ii= 1:10
output{ii}=rand(ii);
end
,在代码出错时激活调试帮助。当MATLAB抛出错误时,这将触发调试停止,您可以键入dbstop if error
和size(rand(ii))
来查看两者的大小。
通常,阅读正在使用的函数的文档也有助于查看是否可以使用不同的大小。
也就是说,第二个选项,单元阵列,将始终确保一切都适合。然而,矩阵通常在MATLAB中更快更容易使用,因此如果可以,您应该针对基于矩阵的解决方案。