如何根据行和列数据查找值

时间:2014-08-03 07:48:23

标签: matlab matrix row matrix-indexing

我有第一行的矩阵,第一列是数据。基于行和列,我想在矩阵中找到值。 例如,我的矩阵看起来像这样

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的情况下。如何从该矩阵中找到值? 谢谢你的回复。

1 个答案:

答案 0 :(得分:3)

完全匹配案例

%// 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