2

我有三个矩阵,A,B和C。当B大于A时,我想用A使值饱和。它说I中的元素数(即(B> A))必须与A中的元素数量。我在下面检查过,它们是相同的。

>> A = [5 5 5; 5 5 5; 5 5 5];
>> B = [2 2 2; 2 2 2; 2 2 2];
>> C(B > A) = A
In an assignment  A(I) = B, the number of elements in B and I must be the same.

>> numel(B > A)

ans =

     9

>> numel(A)

ans =

     9

>> numel(A>B)

ans =

     9

这也很奇怪。

>> C(B < A) = A

C =

     5     5     5     5     5     5     5     5     5

我刚刚想通了...

C(B>A) = B(B>A)

C =

 5     5     5     5     5     5     5     5     5
4

2 回答 2

6

原因是因为B > A不满足,而产生空集。这将产生空矩阵 ( [])。的每个元素B实际上都小于A因此,这相当于执行:

C([]) = A;

您试图分配A矩阵中的任何位置,并且这些尺寸不匹配。起作用的原因B < A是因为 的每个值B都小于A,所以A这里的赋值会起作用。通常,您需要确保在表达式右侧访问的元素总数必须与要分配元素的表达式左侧的元素数量相同。

正如您在评论中提到的那样,执行以下操作:

C(B > A) = B(B > A)

将工作。这相当于做:

C([]) = B([]);

...本质上,您什么也没做,所以这是一个安全的操作。没有正在访问的值B被分配给 中的位置A

于 2014-07-11T16:37:19.020 回答
3

B>A 是一个逻辑 3x3 矩阵,但 C(B>A) 是空集,您正在为其分配一个 3x3 矩阵。因此错误。尝试

C(B>A)=A(B>A);

另一方面,C(B < A) 是 C,一个 3x3 矩阵,因此 C(B < A) 是 C,您可以将 A 分配给它。

于 2014-07-11T16:37:22.597 回答