我有三个矩阵,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
究其原因是因为B > A
is 从不满意,并产生空集。这将产生空矩阵([]
)。的每一个元素B
实际上是smaller than A
。因此,这相当于执行:
C([]) = A;
您正在尝试分配A
to nowhere在矩阵中,并且这些维度不匹配。之所以B < A
有效是因为每个值B
小于A
,所以分配A
将在这里工作。一般来说,您需要确保表达式右侧访问的元素总数必须等于与要为其分配元素的表达式左侧的元素数量相同。
正如您在评论中提到的,执行以下操作:
C(B > A) = B(B > A)
将工作。这相当于做:
C([]) = B([]);
...本质上,您没有执行任何操作,因此这是一个安全的操作。没有值被访问B
被分配到以下地点A
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)