【问题标题】:How to find the nearest index to a specified index in Matlab如何在Matlab中找到与指定索引最近的索引
【发布时间】:2012-10-25 01:19:43
【问题描述】:

我在 MATLAB 中有两个向量,A 和 B。B 包含一些索引(1 到结束)。我有一个随机索引 R(在向量索引的范围内)。我想编写一个函数(或语句)来选择 A[z],其中 z 是不包含在 B 中的最接近 R 的数字(即索引)。

例子:

A = [2 3 6 1 9 7 4 5 8]
B = [3 4 5 6 7 8]
R = 5

函数必须返回3,因为最近的索引是2,因为5-2

谢谢

【问题讨论】:

    标签: arrays matlab vector indexing


    【解决方案1】:

    请注意 setdiff 和 setxor 函数对结果进行排序。

    tmpSet = R - setdiff(1:numel(A),B);
    [~,z] = min(abs(tmpSet));
    z = tmpSet(z);
    Result = A(R-z);
    

    问题中的相同示例:

    A = [2 3 6 1 9 7 4 5 8]
    B = [3 4 5 6 7 8]
    R = 5
    
    tmpSet = 5 - {1 2 9} = {4 3 -4}
    z = 2
    z = 3
    Result = A(5-3) = A(2) = 3 
    

    感谢您的想法。

    【讨论】:

      【解决方案2】:

      改进jacob的答案,这是正确的解决方案:

      [result, z] = min(abs(R - setxor(B, 1:numel(A))))
      

      在你的情况下,产生z = 2result = A(2) = 3

      【讨论】:

      • 感谢您的帮助。我认为最好使用 settdiff 而不是 setxor。我在下面更改了您的代码。请让我知道您的意见。
      • 我正在使用 MATLAB 2012。如 setxor 文档中所述,setxor(A,B) = A-B union B-A(对称差异)。但是,在我们的例子中,我认为它不会产生任何差异,因为 B 包含范围内的数字。
      【解决方案3】:

      如果我理解正确,您可以先进行排除,以找到不在 B 中的索引,即excl = A(setxor(B,1:length(A)))。然后很容易得到像这样excl(min(abs(R-excl)))的最小值。

      【讨论】:

      • setxor 绝对是正确的方向,但结果是错误的。 excl 应该包含 A 的索引,而不是它的值。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多