如何在Matlab中比较特定索引中数组中的值? 假设:
A= [2 2 3 3 3 4 4 4 5 5 6 6 7 8 8]
所以我想找到那个 指数 2,3,4,5,6 值或相同与否?
注意:可以动态输入索引。
数组中值的数量(长度)也可以更改..
答案 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
更快。在示例中使用A
和ind
,
>> 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));
第二个选项假定子向量永远不会为空!