我正在尝试找出如何将两个一维数组放入一个函数中,这样数组1中的每个数字都会与数组2中的每个数字进行比较,然后将找到的重复数字的元素编号相对于数组1进行显示例如数组1 = [12,16,36,72,82]数组2= [16,53,72,12,40,71]而输出将是元素= 1 2 4我是新的Matlab,所以我目前还没有所有的技能,使这个工作我试图弄清楚,但我不知道到底要做什么。它不会让我张贴的代码,因为它没有意义。我不知道如何张贴是对她,否则。
wgmfuz8q1#
[编辑2]
下面的不可靠方法适用于OP给出的示例,其限制条件如下所述。最好的方法是使用MATLAB的ismember和find函数:
ismember
find
array1 = [12,16,36,72,82]; array2 = [16,53,72,12,40,71]; idc = find( ismember(array1, array2 ) )
ismember(array1, array2)
array1
array2
find(...)
[编辑1]
没有ismember的方法是:
array1 = [12,16,36,72,82]; array2 = [16,53,72,12,40,71]; findFcn = @(X) find( array1(:) == X )'; idcs = arrayfun(findFcn, array2(:), 'UniformOutput', false ); idcs = unique([idcs{:}])
说明:
findFun(X)
X
arrayfun
idcs = unique([idcs{:}]);
idc
[第一个答案]
您可以使用intersect函数:
intersect
array1 = [12,16,36,72,82]; array2 = [16,53,72,12,40,71]; [ ~, x1 ] = intersect( array1, array2 );
~表示第一个传回值(array1和array2的交集)会被舍弃。x1就会相等交集值在array1中的索引。如果您还想在array2中使用索引,可以执行以下操作
~
x1
[ ~, x1, x2 ] = intersect( array1, array2 );
以将它们存储在x2中。
x2
1条答案
按热度按时间wgmfuz8q1#
[编辑2]
下面的不可靠方法适用于OP给出的示例,其限制条件如下所述。最好的方法是使用MATLAB的
ismember
和find
函数:ismember(array1, array2)
返回一个逻辑数组,指示array1
中得哪些元素包含在array2
中.find(...)
将逻辑数组转换为索引。[编辑1]
没有
ismember
的方法是:说明:
findFun(X)
给出了array1
中X
的值的索引。findFun(X)
由arrayfun
调用,其中X
等于array2
的每个元素,并且arrayfun
存储对单元数组idcs的调用的返回值。idcs = unique([idcs{:}]);
将单元格数组idc
转换为双数组并删除重复。[第一个答案]
您可以使用
intersect
函数:~
表示第一个传回值(array1
和array2
的交集)会被舍弃。x1
就会相等交集值在array1
中的索引。如果您还想在
array2
中使用索引,可以执行以下操作以将它们存储在
x2
中。x1
和x2
仅分别包含array1
和array2
中第一次出现的索引。