比较Matlab中特定索引的数组值

时间:2014-07-31 09:54:06

标签: arrays matlab compare

如何在Matlab中比较特定索引中数组中的值? 假设:

A= [2 2 3 3 3  4 4 4 5 5 6 6 7 8 8]

所以我想找到那个 指数 2,3,4,5,6 值或相同与否?

注意:可以动态输入索引。
数组中值的数量(长度)也可以更改..

3 个答案:

答案 0 :(得分:3)

要检查它们是否相等:使用diff减去值对,然后检查所有这些差异是否为0.

A = [2 2 3 3 3 4 4 4 5 5 6 6 7 8 8];
ind = [2 3 4 5 6];
result = ~any(diff(A(ind)));

这比使用unique更快。在示例中使用Aind

>> tic
for cont = 1:1e5
    result = ~any(diff(A(ind)));
end
toc

tic
for cont = 1:1e5
    result=numel(unique(A(ind)))==1;
end
toc

Elapsed time is 0.371142 seconds.
Elapsed time is 4.754007 seconds.

答案 1 :(得分:1)

嘿,这应该可以解决问题:

A= [2 2 3 3 3  4 4 4 5 5 6 6 7 8 8];

B= [1,3,5];

C=A(B);
result=numel(unique(C))==1;

此处A是您的数据。 B是索引向量。 C包含与索引向量对应的元素。 如果所有值都相同,则result为1,否则为0。

您甚至可以通过加入以下两行来“缩短”代码:

result=numel(unique(A(B)))==1;

答案 2 :(得分:0)

有一些方法,这取决于你的口味。

例如,如果变量indexing包含相应的索引:

unique(A(indexing));

将为您提供包含子向量A(indexing)中唯一元素的向量。然后你只需要查看长度:

length(unique(A(indexing))) == 1

当函数长度可用时,我会避免使用numel(你想要实现的更清晰得多)。

其他选项是将第一个元素与子矢量中元素的其余部分进行比较:

sub_vector = A(indexing);
all(sub_vector == sub_vector(1));

第二个选项假定子向量永远不会为空!