Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在赋值A(:)=B中,A和B中的元素数必须相同_Arrays_Matlab_Indexing - Fatal编程技术网

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