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

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

Connectez-vous pour commenter.

Réponse acceptée

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

Plus de réponses (0)

Catégories

En savoir plus sur 行列および配列 dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!