Knowing the value in the first and second column of an array, what is the corresponding value in the third column?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Justin Walker
am 17 Mai 2020
Kommentiert: Justin Walker
am 20 Mai 2020
Hello, I've produced a 121x3 array named XYPoints, where the first column corresponds to an X coordinate, the second corresponds to a Y coordinate, and the third column corresponds to the node number at those coordinates.
How would I go about finding the value in the third column if I knew the value in the first two columns? For example, if I knew X=0.05 and Y=0.03, I would have a node number of 15.
width = 0.5;
height = 0.1;
yin = 0.01; %increments in y
xin = 0.05; %increments in x
y=0;
x=0;
nodes=0;
while x<=width
while y<=height
nodes=nodes+1;
X(nodes) = x;
Y(nodes) = y;
y=y+yin;
end
y=0;
x=x+xin;
end
X = X.';
Y = Y.';
XYPoints=[X Y];
XYPoints=[XYPoints,[1:size(XYPoints,1)]']
0 Kommentare
Akzeptierte Antwort
dpb
am 17 Mai 2020
Bearbeitet: dpb
am 17 Mai 2020
Use the MATrix LABoratory features of MATLAB instead of explicit loops where can...
width = 0.5;
height = 0.1;
nIntervalsX = 10; % number elements in x direction
nIntervalsY = 10; % ditto in y
[X Y]=meshgrid(linspace(0,width,nIntervalsX+1),linspace(0,height,nIntervalsY+1)); % 2D X Y grid
XYPoints=[X(:) Y(:) [1:numel(X)].']; % to Nx x Ny x 3 array
fnIDX=@(x,y) find(XYPoints(:,1)==x & XYPoints(:,2)==y); % lookup function
includes a slight generalization of varying number points/elements in the two directions.
>> fnIDX(0.05,0.03)
ans =
15
>>
Works for most cases; in general find is risky for floating point matching, replace the "==" operator with ismembertol
fnIDX=@(x,y)find(ismembertol(XYPoints(:,1),x) & ismembertol(XYPoints(:,2),y));
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Logical 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!