我需要在MATLAB中比较两个表的内容,更准确地说是两列(每个表一列),以查看第一列的每个元素,如果第二列中有相等的元素。
我应该使用for循环还是现有的MATLAB函数可以执行此操作?
答案 0 :(得分:8)
如果订单很重要,请执行element-wise comparison,然后使用all
%# create two arrays
A = [1,2;1,3;2,5;3,3];
B = [2,2;1,3;1,5;3,3];
%# compare the second column of A and B, and check if the comparison is `true` for all elements
all(A(:,2)==B(:,2))
ans =
1
如果订单不重要且所有元素都是唯一的,请使用ismember
all(ismember(A(:,1),B(:,1))
ans =
1
如果订单不重要且有重复,请使用sort
all(sort(A(:,1))==sort(B(:,2)))
ans =
0
答案 1 :(得分:2)
你知道你可以这样做:
>> a = [1:5];
>> b = [5:-1:1];
>> a == b
ans =
0 0 1 0 0
因此您可以在整个列上使用==运算符来比较matlab中的2列。并且您可以使用其中的结果作为索引说明符来获取相等的值。像这样:
>> a(a == b)
ans =
3
这意味着,选择a == b为真的所有元素。
例如,您还可以选择大于3的所有元素:
>> a(a > 3)
ans =
4 5
使用这些知识我会说你可以解决你的问题。
答案 2 :(得分:1)
对于算术值,提到的两个解决方案都有效。对于字符串或字符串的单元格数组,请使用strcmp
/ strcmpi
。
从帮助文件中:
TF = strcmp(C1,C2)将C1的每个元素与C2中的相同元素进行比较,其中C1和C2是字符串的相等大小的单元阵列。输入C1或C2也可以是具有正确行数的字符数组。该函数返回TF,一个与C1和C2大小相同的逻辑数组,并且对于那些匹配的C1和C2元素包含逻辑1(true),对于那些不匹配的元素包含逻辑0(false)。
示例(也来自帮助文件):
示例2
创建3个字符串单元格数组:
A = {'MATLAB','SIMULINK';'Toolboxes','The MathWorks'};
B = {'Handle Graphics','Real Time Workshop';'Toolboxes','The MathWorks'};
C = {'handle graphics','Signal Processing';' Toolboxes', 'The MATHWORKS'};
将细胞阵列A和B与对病例的敏感性进行比较:
strcmp(A, B)
ans =
0 0
1 1
比较单元格阵列B和C,而不区分大小写。请注意,“工具箱”不匹配,因为C {2,1}中的前导空格字符未出现在B {2,1}中:
strcmpi(B, C)
ans =
1 0
0 1
要获取单个返回值而不是逻辑值数组,请使用Jonas所解释的all
函数。
答案 3 :(得分:-2)
您可以使用for循环(下面的代码)来比较同一个表中第1列和第2列的内容:
clc
d=[ 19 24 16 12 35 0
16 16 18 0 23 18
16 10 7 10 13 24
19 8 30 0 12 26
16 12 4 1 13 12
24 0 31 0 40 0
12 11 10 6 20 0
16 11 6 2 25 9
17 9 21 0 17 8
20 0 7 10 22 0
13 16 12 18 17 13
17 23 17 0 23 20
25 0 10 3 17 15
14 4 4 17 12 10
19 24 21 5 35 0
15 20 5 0 10 31
13 8 0 16 40 0
18 27 26 1 19 14
12 0 2 0 12 4
20 0 6 2 15 21
20 0 26 0 18 26
12 11 1 13 19 15
14 0 20 0 9 16
14 15 6 12 40 0
20 0 8 10 18 12
10 11 14 0 13 11
5 0 22 0 8 12 ];
x1=d(:,1);
y1=d(:,2);
for i=1:27
if x1(i)>y1(i);
z(i)=x1(i);
else
z(i)=y1(i);
end
end
z'