【问题标题】:compare two different sized arrays and get a 1 separate array of matched values and 1 of locations比较两个不同大小的数组并获得 1 个单独的匹配值数组和 1 个位置
【发布时间】:2017-10-13 19:58:20
【问题描述】:

如何比较两个不同大小的数组并获得一个单独的匹配值位置数组和单独的匹配值数组。

我有两个不同大小的数组

 Ylocknew = [0    1.0000   -4.3000    5.0000   -4.2000 7.0000   -7.4000    8.0000    1.0000    4.0000]

 Ypos         = [1     5     7     8   4]

我想比较两个数组并得到另一个包含 Ypos 和 Ylocknew 相似值的数组以及另一个包含匹配点索引值的数组。

代码:

 Ypos(end:numel(Ylocknew))=inf
 R_common =Ylocknew(Ylocknew==Ypos);
 I = find(Ylocknew==Ypos);

预期输出值:

我需要 2 个新数组

Yposlocknew = [1 5 7 8 4]
Yposloc = [2 4 6 8 10]

使用方法:

RST_intersection = (intersect(Ylocknew,Ypos))

Output for similar values :

RST_intersection = [   1     5     7     8]

指数(我试过):

  RST_intersection = find(intersect(Ylocknew,Ypos))

结果是(那是错误的)

 RST_intersection =[  1     2     3     4]

我正在尝试这样做,但它给了我一个大小为 1*0 的空矩阵。

如果可能的话,不使用循环的任何快速简便的方法都可以加快处理速度,因为我有很多价值。

【问题讨论】:

  • 这是我使用 ismember 得到的结果,但它的错误 ismember 正在复制值,我也尝试过此命令。为什么不这是最后 1 不匹配的原因我必须将 Ypos 与 Ylocknew 匹配并获得不重复的矩阵意味着 Ypos 具有值,我需要这些值以相同顺序可用的位置

标签: arrays matlab signal-processing


【解决方案1】:

这里只需要带有stable 标志的intersect

[Yposlocknew, Yposloc] = intersect(Ylocknew,Ypos,'stable');

find(intersect(Ylocknew,Ypos)) 肯定会给你[1 2 3 4],因为intersect(Ylocknew,Ypos) 的所有元素都不为零。

【讨论】:

  • 是的,非常感谢它现在可以正常工作了.. 很好的答案,感谢您的帮助和时间被投票和接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多