>> XOR(X,X)
??? Undefined function or method 'XOR' for input arguments of type 'logical'.
为什么XOR
不能用于逻辑矩阵?
我尝试了一个更简单的例子:
>> A=[1 0;1 0];
>> B=[1 1;0 0];
>> XOR(A,B)
??? Undefined function or method 'XOR' for input arguments of type 'double'.
如何正确使用XOR
?
答案 0 :(得分:8)
它对我有用。
A=[1 0;1 0];
B=[1 1;0 0];
xor(A,B)
ans =
0 1
1 0
然而,当我尝试这个......
XOR(A,B)
??? Undefined function or method 'XOR' for input arguments of type 'double'.
看到差异。保留上限以解决问题。
我认为由于其文档中使用的MathWorks约定而产生歧义。当他们在帮助中显示函数的名称时,他们会使用全部大写。例如,这是xor的帮助。
>> help xor
XOR Logical EXCLUSIVE OR.
XOR(S,T) is the logical symmetric difference of elements S and T.
The result is logical 1 (TRUE) where either S or T, but not both, is
nonzero. The result is logical 0 (FALSE) where S and T are both zero
or nonzero. S and T must have the same dimensions (or one can be a
scalar).
即便如此,当您使用该功能时,也会在功能名称中使用小写字母。
答案 1 :(得分:1)
以下内容如何:
C = abs(A-B);
上面的陈述使C成为A和B的异或,因为xor是真的,其中条目彼此不同,1-0或0-1将给出1或-1(并且其中的abs将给出1 ),而0-0和1-1都是1。
如果您真的想要,可以使用以下定义创建“XOR.m”文件:
function C=XOR(A,B) % function C=XOR(A,B) % INPUTS: % A - m x n matrix, consisting only of 1s or 0s. % B - m x n matrix, consisting only of 1s or 0s. % OUTPUT: % C - m x n matrix, containing the logical XOR of the elements of A and B C=abs(A-B)
但是,你应该记住,Matlab中的函数调用非常慢,所以你可能只想写出我给你的定义,无论你什么时候需要它。
修改的
我最初并不理解您的问题....您需要使用xor
而不是XOR
,如果它抱怨您的矩阵是双精度而不是逻辑,那么请使用A==1
和B==1
代替A
和B
。 Matlab is case sensitive when it comes to variable names and built-in functions such as the xor function
答案 2 :(得分:0)
见this post。 C = A~=B