作者:手机用户2602936475 | 来源:互联网 | 2023-02-01 11:05
例如,在尝试运行我的代码时
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.
这个错误是什么意思?摆脱它的方法是什么?
1> Ander Biguri..:
出现此错误的原因是您尝试使用比其大小更多(或更少)的值填充变量块.换句话说,你有一个A(:)=B
关于size(A(:))
不同之处的陈述size(B)
.
在问题的示例中,rand(3)
返回一个3x3
矩阵,但是,output(ii)
只是一个值(即使output
可能更大,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
很可能与问题中的示例不同,在实际情况下,您不知道输出返回的大小,因此您不知道用于修复代码的两个选项中的哪一个.
在可能的学习方法上,通过键入dbstop if error
命令行,在代码出错时激活调试帮助.当MATLAB抛出错误时,这将触发调试停止,您可以键入size(rand(ii))
并size(output(ii))
查看两者的大小.
通常,阅读所使用的功能的文档也有助于查看是否可能有不同的大小.
也就是说,第二个选项,单元阵列,将始终确保一切都适合.但是,矩阵通常在MATLAB中使用起来更快,更容易,因此如果可以,您应该针对基于矩阵的解决方案.
请保持原样.这是我们将来需要链接的规范副本.