Arrays 在赋值A(:)=B中,A和B中的元素数必须相同
例如,当尝试运行我的代码时Arrays 在赋值A(:)=B中,A和B中的元素数必须相同,arrays,matlab,indexing,Arrays,Matlab,Indexing,例如,当尝试运行我的代码时 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 或 这个错误意味着什么?如何消除它?此错误是因为您试图用比其大小更多(或更少)的值填充变量块。换句话说,您有一条语句a(:)=B,其中size(a(:)与size(B)不同 在问题的示例中,rand(3)返回一个3x
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
或
这个错误意味着什么?如何消除它?此错误是因为您试图用比其大小更多(或更少)的值填充变量块。换句话说,您有一条语句
a(:)=B
,其中size(a(:)
与size(B)
不同
在问题的示例中,rand(3)
返回一个3x3
矩阵,output(ii)
只是一个值(即使output
可能更大,output(ii)
只是output
的一个值),因此rand(3)返回的值
不适合内部输出
为了解决这个问题,您需要更改输出
变量的大小,这样您就有空间来适应所有结果
有两种方法可以做到这一点。其中一种方法是创建符合返回的矩阵,例如输出=零(3,3,10)
然后我们可以将代码更改为
for ii= 1:10
output(:,:,ii)=rand(3);
end
或者,您可以将输出
填充为单元格数组。当函数的返回值每次都改变大小时,这尤其有用,例如,rand(ii)代码>
在这种情况下,以下方法可行
for ii= 1:10
output{ii}=rand(ii);
end
很可能与问题中的示例不同,在实际情况中,您不知道输出返回的内容的大小,因此您不知道使用这两个选项中的哪一个来修复代码
了解这一点的可能方法是,在代码出错时激活调试帮助,方法是在命令行中键入dbstop if error
。当MATLAB抛出错误时,这将触发调试停止,您可以键入size(rand(ii))
和size(output(ii))
来查看这两个变量的大小
通常,阅读所使用函数的文档也有助于了解不同大小的函数是否可行
这就是说,第二种选择,单元阵列,将始终确保一切都适合。但是,矩阵在MATLAB中通常更快、更容易使用,因此,如果可以的话,您应该以基于矩阵的解决方案为目标。这是对这一常见问题的简单解释,请随意编辑/添加信息,我可以将其转换为一个社区Wiki,请保持原样。这是一个我们将来需要链接的规范副本。
for ii= 1:10
output{ii}=rand(ii);
end