データシート内にある特定列の値から指定した値の近傍値を求めて、該当行にある任意の値を参照したい
4 views (last 30 days)
Show older comments
X | Y || a | b | c | ... | z | ... |
10 | 10 || a1 | b1 | c1 | ... | z1 | ... |
20 | 10 || a2 | b2 | c2 | ... | z1 | ... |
30 | 10 || a3 | b3 | c3 | ... | z1 | ... |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10 | 50 || a* | b* | c* | ... | z* | ... |
20 | 50 || a* | b* | c* | ... | z* | ... |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10 | 200 || a* | b* | c* | ... | z* | ... |
20 | 200 || a* | b* | c* | ... | z* | ... |
このように X, Y 列に任意の値があり、指定された X, Y の最近傍値を求めて、
該当する行の a, c, c, ... の値を各変数に代入したいです。
また、該当が複数ある場合は、a, b, c, ... 各値の平均値を使用したいです。
例 X = 24, Y = 12 のとき
a = a2, b = b2, c = c2, ... を代入
1 Comment
Accepted Answer
Kenta
on 30 Jan 2019
clear;clc;close all
%例となるデータの作成。XY座標内で、格子点上に各値がある
[X, Y]=meshgrid(1:10,1:10);
Z1=randi(10,[10 10]);
Z2=randi(10,[10 10]);
data=[X(:),Y(:),Z1(:),Z2(:)];
figure;scatter(X(:),Y(:),Z1(:)*10,Z1(:),'filled')
colorbar
title('各X, Y座標でのZ1の値')
%x, yの値を代入して、その点と図の点がどこが近いか=>その点の値を求める
%x=5; y=5; 格子点上の値が得られる
% 小数を打つと候補が複数含まれる場合がある
x=5.5;
y=5.5;
idx=(1:size(data,1))';
dist=(data(:,1)-x).^2+(data(:,2)-y).^2;
ind=[idx,dist];
ind=sortrows(ind,2);
min_idx=find(dist(:,1)==min(ind(:,2)));
value=data(min_idx,:)
value_XY=data(min_idx,1:2);
value_ab=data(min_idx,3:size(data,2));
指定したXとYの値(質問文中ではX=24、Y=12)と他のX,Yの平方和を求めて、最も小さい点(1点または複数)の行数を参照する形で求められます。
dataにそちらのデータを代入すると実行可能と思います。
0 Comments
More Answers (0)
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!