matlab 如何比较两个一维数组并输出索引,其中数组1与数组2具有相同的标量值

2w3rbyxf  于 2022-11-24  发布在  Matlab
关注(0)|答案(1)|浏览(256)

我正在尝试找出如何将两个一维数组放入一个函数中,这样数组1中的每个数字都会与数组2中的每个数字进行比较,然后将找到的重复数字的元素编号相对于数组1进行显示
例如数组1 = [12,16,36,72,82]数组2= [16,53,72,12,40,71]
而输出将是元素= 1 2 4
我是新的Matlab,所以我目前还没有所有的技能,使这个工作我试图弄清楚,但我不知道到底要做什么。它不会让我张贴的代码,因为它没有意义。我不知道如何张贴是对她,否则。

wgmfuz8q

wgmfuz8q1#

[编辑2]

    • 最佳方法**

下面的不可靠方法适用于OP给出的示例,其限制条件如下所述。最好的方法是使用MATLAB的ismemberfind函数:

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)给出了array1X的值的索引。
  • findFun(X)arrayfun调用,其中X等于array2的每个元素,并且arrayfun存储对单元数组idcs的调用的返回值。
  • 最后,idcs = unique([idcs{:}]);将单元格数组idc转换为双数组并删除重复。

[第一个答案]

    • 不可靠的方法**

您可以使用intersect函数:

array1 = [12,16,36,72,82]; 
array2 = [16,53,72,12,40,71];
[ ~, x1 ] =  intersect( array1, array2 );

~表示第一个传回值(array1array2的交集)会被舍弃。x1就会相等交集值在array1中的索引。
如果您还想在array2中使用索引,可以执行以下操作

[ ~, x1, x2 ] =  intersect( array1, array2 );

以将它们存储在x2中。

  • 注意:* x1x2仅分别包含array1array2中第一次出现的索引。

相关问题