MATLAB矩阵替换分配给出了错误

时间:2010-03-07 19:39:40

标签: matlab matrix variable-assignment dimension

我试图更新矩阵的某些部分,我收到以下错误消息:

???赋值比非单例下标具有更少的非单例rhs维度

我的代码尝试更新表示二进制图像的矩阵的某些值。我的代码如下:

outImage(3:5,2:4,1) = max(imBinary(3:5,2:4,1));

当我删除最后一个参数(1)时,这次我得到了同样的错误。我猜尺寸之间存在不匹配但我无法得到它。 outImage是一个在那时创建的新对象(我之前尝试创建它,但没有任何改变)。可能有什么不对?

4 个答案:

答案 0 :(得分:3)

您在其中一条评论中提到您正在尝试创建自己的扩张算法,因此希望在3乘3乘1的子矩阵中取最大值并替换其中的值具有最大值的子矩阵。默认情况下,函数MAX将沿着子矩阵的列运行,这将为您提供1乘3的矩阵(即3乘3乘1矩阵的列的最大值) 。错误的结果是因为MATLAB不能将1乘3的矩阵分配给3乘3乘1的矩阵。

一种解决方案是再次在1 x 3矩阵上调用MAX以获得标量值,然后您可以将其分配给3 x 3 x 1子矩阵的每个元素而不会出现错误:

outImage(3:5,2:4,1) = max(max(imBinary(3:5,2:4,1)));

答案 1 :(得分:1)

您是否希望通过rhs表达式的每一列的最大值填充outImage中的所有索引元素?您可以使用REPMAT扩展您在rhs上获得的行:

outImage(3:5,2:4,1) = repmat(max(imBinary(3:5,2:4,1)),3,1)

outImage(3:5,2:4)也适用。

答案 2 :(得分:1)

在等式的rhs上,取最大3x3x1子矩阵,返回1x3向量。然后尝试将其分配给3x3x1子矩阵。单例下标是一个值为1.因此rhs有1个非单例下标,而lhs有2.Matlab无法弄清楚如何扩展1x3矩阵以填充3x3x1空间。

我不完全确定你想做什么,所以我不会猜测解决方案。你想制作3份rhs并将其中一个放入lhs子矩阵的每一行吗?或者你是否想在rhs上构建一个3x3x1矩阵?

答案 3 :(得分:1)

之前我遇到了同样的错误,我之前做的是定义左手矩阵。我不知道你是否有相同的案例,但你可以尝试以下方法:

outImage=Zeros(M,N,K);

M,N和K是您拥有的尺寸。然后输入:

outImage(3:5,2:4,1) = max(max(imBinary(3:5,2:4,1)));