例如,当尝试运行我的代码时
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.
这个错误是什么意思?摆脱它的方法是什么?
最佳答案
出现此错误是因为您试图用比其大小更多(或更少)的值填充变量 block 。换句话说,你有一个声明 A(:)=B
关于 size(A(:))
与 size(B)
不同的地方>。
在问题的示例中,rand(3)
返回一个 3x3
矩阵,但是,output(ii)
只是一个值(即使 output
可能更大,output(ii)
只是 output
的单个值),因此 返回的值>rand(3)
不适合 output
。
为了解决这个问题,你需要改变output
变量的大小,这样你就有空间来容纳所有的结果。
有两种方法可以做到这一点。其中之一是创建适合返回的矩阵,例如输出=零(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 中使用起来更快、更容易,因此如果可以的话,您应该以基于矩阵的解决方案为目标。
关于arrays - 在赋值 A( :) = B, 中 A 和 B 中的元素数必须相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44563305/