arrays - 在赋值 A( :) = B, 中 A 和 B 中的元素数必须相同

标签 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

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/

相关文章:

performance - 快速巧合搜索算法?

vba - 在 VBA 中使用工作表索引而不是名称

mongodb - 向 MongoDB 集合哈希字段添加索引

c - 如何找到数组中重复次数最多的值?

java - Arrays.asList(T[] 数组)?

Java程序计算字符串中每个字符出现的次数

javascript - PrestaShop:使用 smarty 添加 javascript 数组元素

matlab - 如何控制显示哪些监视器图?

matlab - (将MATLAB脚本转换为Octave脚本)输出图中的LaTeX渲染

sql - SQL Server 2008 非聚集索引是否包含聚集索引字段?