我想看一个数组是否以与另一个数组相同的元素开始,而不必分别编写一堆for循环遍历每个元素。
例如,如果我有下面的数组
Array1 = [1 2 3 4]
Array2 = [1 2 3 4 5 3 2 5 7]
Array3 = [1 2 3 5]
然后将Array1与Array2进行比较将返回true。 并且将Array3与Array2进行比较将返回false。
有没有快速简便的方法。我不知道我要比较的数组的长度。我想要比较的元素数等于最短矢量的长度。
谢谢!
答案 0 :(得分:3)
您可以使用isequal
检查两个向量中的所有元素是否相同。要仅检查前n个元素,可以执行Array(1:n)
,因此整个函数将如下所示:
Array1 = [1 2 3 4]
Array2 = [1 2 3 4 5 3 2 5 7]
Array3 = [1 2 3 5]
n = 4; % Compare the first n elements
isequal(Array1(1:n), Array2(1:n))
ans = 1
isequal(Array2(1:n), Array3(1:n))
ans = 0
如果您使用Array1(1:n) == Array2(1:n)
,则会得到1 1 1 1
的分段比较结果。当然,这意味着您也可以这样做:
all(Array1(1:n) == Array2(1:n))
ans = 1
all(Array2(1:n) == Array3(1:n))
ans = 0
如果您希望n
是最小向量中的元素数(根据您的评论),Chris和Ben解释问题,您可以通过以下方式解决:
isequal(Array1(min([numel(Array1) numel(Array2)])), Array2(min([numel(Array1) numel(Array2)])))
或者说有点清洁:
n = min([numel(Array1) numel(Array2)])
isequal(Array1(1:n), Array2(1:n))
答案 1 :(得分:2)
这是一个函数,它将比较任意两个向量的初始段,直到最短向量的长度。如果它们相同则返回true
,如果它们不相同则返回false
。
请注意
NaN
,那么它将始终返回false
,因为NaN == NaN
为false
。这是 -
function result = equal_initial_segment(x, y)
N = min(length(x), length(y));
result = isequal(x(1:N), y(1:N));
end
答案 2 :(得分:0)
看起来你只是将较短列表的所有元素与较长列表的第一个元素进行比较,在这种情况下你可以这样做:
function same = compareLists(list1, list2)
if length(list1) > length(list2)
same = isequal(list2, list1(1:length(list2));
else if
same = isequal(list1, list2(1:length(list1));
end
end
答案 3 :(得分:0)
您可以使用strmatch
:
~(isempty(strmatch(Array1, Array2)) && isempty(strmatch(Array2, Array1)))