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

조회 수: 6 (최근 30일)
T-KS Lab.
T-KS Lab. 2019년 1월 30일
댓글: michio 2019년 2월 2일
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
michio
michio 2019년 2월 2일
質問の投稿、ありがとうございました。もし課題や疑問が解決されておりましたら、
ぜひ、該当する回答の「この回答を採用」ボタンのクリックをお願いいたします。

댓글을 달려면 로그인하십시오.

채택된 답변

Kenta
Kenta 2019년 1월 30일
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개)

카테고리

Help CenterFile Exchange에서 行列および配列에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!