データシート内にある​特定列の値から指定し​た値の近傍値を求めて​、該当行にある任意の​値を参照したい

4 views (last 30 days)
T-KS Lab.
T-KS Lab. on 30 Jan 2019
Commented: michio on 2 Feb 2019
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
michio
michio on 2 Feb 2019
質問の投稿、ありがとうございました。もし課題や疑問が解決されておりましたら、
ぜひ、該当する回答の「この回答を採用」ボタンのクリックをお願いいたします。

Sign in to comment.

Accepted Answer

Kenta
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にそちらのデータを代入すると実行可能と思います。

More Answers (0)

Categories

Find more on 行列および配列 in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!