Determining Quadrants in a Matrix

7 Ansichten (letzte 30 Tage)
TS
TS am 4 Mai 2015
Kommentiert: Yong Cho am 1 Okt. 2019
matrix=load('Data');
x=matrix(:,1);
y=matrix(:,2);
if x>0 & y>0
matrix(:,3)=1
elseif x<0 & y>0
matrix(:,3)=2
elseif x<0 & y<0
matrix(:,3)=3
elseif x>0 & y<0
matrix(:,3)=4
elseif x<-128 & y<-128 & x>128 & y>128
'Invalid Values'
end
With this code, I'm trying to put separate points into a matrix. However, my code doesn't do anything with the values as far as I have seen. I was trying to put the quadrant values into a third column so that I could code the script to count all points in each quadrant, so there is a reason for it. If you have any suggestions I would greatly appreciate it.

Akzeptierte Antwort

Jan
Jan am 4 Mai 2015
The if command evaluates the condition as a scalar. This is logical, because what could this mean:
if [true, false]
? Is this true or not? Therefore Matlab inserts a all() in the condition, if the user forgot this. So you have:
if all(x>0 & y>0)
And this is never true. What you want is:
index = (x>0 & y>0);
matrix(index, 3) = 1;
...
The last condition is magic:
elseif x<-128 & y<-128 & x>128 & y>128
You are looking for numbers which are smaller than -128 and larger than 128? You want an or.
  1 Kommentar
TS
TS am 4 Mai 2015
Bearbeitet: TS am 4 Mai 2015
Thank you!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Stephen23
Stephen23 am 4 Mai 2015
Bearbeitet: Stephen23 am 4 Mai 2015
Actually you do not need these if statements at all: just use logical indexing directly, like this:
matrix = load('Data');
x = matrix(:,1);
y = matrix(:,2);
matrix(x>0 & y>0,3) = 1;
matrix(x<0 & y>0,3) = 2;
matrix(x<0 & y<0,3) = 3;
matrix(x>0 & y<0,3) = 4;

Kategorien

Mehr zu Particle & Nuclear Physics 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!

Translated by