比较MATLAB中两列的内容

时间:2010-05-09 11:49:15

标签: matlab

我需要在MATLAB中比较两个表的内容,更准确地说是两列(每个表一列),以查看第一列的每个元素,如果第二列中有相等的元素。

我应该使用for循环还是现有的MATLAB函数可以执行此操作?

4 个答案:

答案 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'