【问题标题】:How to find values based on row and column data如何根据行和列数据查找值
【发布时间】:2014-08-03 07:48:23
【问题描述】:

我有一个矩阵,第一行第一列是数据。基于行和列,我想在矩阵中查找值。 例如,我的矩阵是这样的

A =

0.1000    1.0000   10.0000  100.0000
1.0000    0.9000    0.4000    0.5000

如果行数据为 1(第二行),列数据为 10(第三列),那么我得到 0.4 值。 有没有办法找到那个值? 例如,如果行数据为 0.2,列数据为 0.2。如何从该矩阵中找到值? 感谢您的回复。

【问题讨论】:

    标签: matlab matrix row matrix-indexing


    【解决方案1】:

    完全匹配大小写

    %// Inputs (Added One more row to original post to include multiple match case)
    A =[
        0.1000    1.0000   10.0000  10.0000
        1.0000    0.9000    0.4000    0.5000
        1.0000    0.6000    0.5000    0.6000]
    row_data = 1.0;
    column_data = 10.0;
    

    现在,如果您要查找与所有匹配项对应的值,请使用 -

    value = A(find(A(:,1)==row_data),find(A(1,:)==column_data))
    

    给我们 -

    value =
        0.4000    0.5000
        0.5000    0.6000
    

    否则,如果您要查找仅与第一个匹配项对应的值,请使用此 -

    value = A(find(A(:,1)==row_data,1),find(A(1,:)==column_data,1))
    

    给我们 -

    value =
        0.4000
    

    另外,请注意浮点数所涉及的精度问题。这应该不是问题,因为我们已经特别提到了数字,并且在匹配和输入输入之间没有进行其他计算。


    不完全匹配大小写

    对于没有完全匹配可用的情况,您可以使用如下代码所示的插值 -

    x = A(1,2:end)
    y = A(2:end,1)
    [X,Y] = meshgrid(x,y)
    V = A(2:end,2:end)
    
    row_data = 1.0;
    column_data = 10.0;
    
    value = interp2(X,Y,V,column_data,row_data)
    

    如果您的 Xq 或 Yq 值分别在 X 和 Y 范围之外,则需要进行外推,我认为您可以使用 scatteredInterpolant 而不是 interp2

    【讨论】:

    • 感谢您的回答。正如您在回答中提到的,如果我的行数据是 0.2,我的列数据是 0.2(介于 0.1 和 1 之间)。我们是否需要插值才能找到值。在这种情况下我们可以使用 interp2 函数吗?谢谢迪瓦卡
    • @Divakar 这也可以通过逻辑索引来完成:A(logical(double(A(:,1)==row_data) * double(A(1,:)==column_data))) 不幸的是,双精度和反向的转换是必要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    • 2015-06-13
    • 1970-01-01
    • 2022-01-18
    • 2020-07-18
    相关资源
    最近更新 更多