And*_*uri 4 arrays indexing matlab
例如,在尝试运行我的代码时
for ii= 1:10
output(ii)=rand(3);
end
Run Code Online (Sandbox Code Playgroud)
我收到了错误
In an assignment A(:) = B, the number of elements in A and B must be the same
Run Code Online (Sandbox Code Playgroud)
要么
In an assignment A(I) = B, the number of elements in B and I must be the same.
Run Code Online (Sandbox Code Playgroud)
这个错误是什么意思?摆脱它的方法是什么?
出现此错误的原因是您尝试使用比其大小更多(或更少)的值填充变量块.换句话说,你有一个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
Run Code Online (Sandbox Code Playgroud)
或者,您可以将其填充output为单元格数组.当函数的返回每次改变大小时,这尤其有用,例如rand(ii);
在这种情况下,以下方法可行
for ii= 1:10
output{ii}=rand(ii);
end
Run Code Online (Sandbox Code Playgroud)
很可能与问题中的示例不同,在实际情况下,您不知道输出返回的大小,因此您不知道用于修复代码的两个选项中的哪一个.
在可能的学习方法上,通过键入dbstop if error命令行,在代码出错时激活调试帮助.当MATLAB抛出错误时,这将触发调试停止,您可以键入size(rand(ii))并size(output(ii))查看两者的大小.
通常,阅读所使用的功能的文档也有助于查看是否可能有不同的大小.
也就是说,第二个选项,单元阵列,将始终确保一切都适合.但是,矩阵通常在MATLAB中使用起来更快,更容易,因此如果可以,您应该针对基于矩阵的解决方案.
| 归档时间: |
|
| 查看次数: |
2515 次 |
| 最近记录: |