逻辑数组 - 在赋值A(I)= B中,B和I中的元素数必须相同

时间:2014-07-11 16:26:22

标签: arrays matlab matrix matrix-indexing

我有三个矩阵,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

2 个答案:

答案 0 :(得分:6)

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

C([]) = A;

您正尝试将A分配到矩阵中的无处,并且这些尺寸不匹配。 B < A之所以有效,是因为B的每个值都小于A,因此A的赋值将在此处起作用。通常,您需要确保表达式右侧访问的元素总数必须等于要分配的表达式左侧相同数量的元素要素。

正如您在评论中提到的那样:

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

会奏效。这相当于:

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

...基本上,你什么都不做,所以这是一个安全的操作。 B中正在为A中的位置分配的值未被分配到{{1}}。

答案 1 :(得分:3)

B&gt; A是逻辑3x3矩阵,但C(B&gt; A)是空集,并且您正在为其分配3x3矩阵。因此错误。 尝试

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

另一方面,C(B