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

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

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

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

Weitere Antworten (0)

Kategorien

Mehr zu 行列および配列 finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!