Select columns from a matrix by treshold value

조회 수: 10 (최근 30일)
Esma Hadu
Esma Hadu 2021년 8월 29일
답변: Esma Hadu 2021년 10월 13일
Hi,
i have some data stored in a 7200*600 matrix (600 could also be 300 or 1000 or something in this range). Somewhere in the middle there are some relevant columns (about 20) which contains higher values than the other. I would like to extract these columns for some calculation (row mean only for these columns etc.). So far i do this by:
M = mean(data);
B = (M > min(M)*1.1); % Treshold of 110 %
data_new = B.*data;
data_new(:,all(data_new == 0))=[]; % Removes columns if the entire column is zero
Then i can calculate the mean like:
data_new_mean = mean(data_new(:,3:end),2); % First two columns are suspect data
This works fine so far but i'm looking for a way to get the indices and work with the original matrix instead of building a new one. In the next step i have to extract the data in the following columns (If the relevant columns before were 200, 210, 220... for example, i need 201, 211, 221... in the next step) and that's why the first way isn't convenient anymore. Do you have some ideas?
  댓글 수: 3
Esma Hadu
Esma Hadu 2021년 8월 30일
Hi,
all values are positive. The question is if there is a possibility to get the indices of the columns which contain values above the treshold. It should me give something like indices(desiredcolumns) = x, y, z, ... and then calculate the row mean only with these columns so that i can do this in the next step with x+1, y+1, z+1...
Walter Roberson
Walter Roberson 2021년 8월 30일
M = mean(data);
B = (M > min(M, 1)*1.1);
mask = any(M >= B, 1);
mask can now be used as a column index.

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

채택된 답변

Esma Hadu
Esma Hadu 2021년 10월 13일
Thank you all,
i just did it via
Y = circshift(B,-1);
which also worked fine for me. Then i could use Y insteat of B to select the columns x+1...

추가 답변 (1개)

Matt J
Matt J 2021년 8월 30일
편집: Matt J 2021년 8월 30일
find( any(M > min(M)*1.1 ,1) )
  댓글 수: 2
Walter Roberson
Walter Roberson 2021년 8월 30일
That would find the columns that contain only data less than the threshold; the user wanted to find columns that contain at least one datapoint greater than the threshold.
Matt J
Matt J 2021년 8월 30일
Yep. I fixed it.

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

카테고리

Help CenterFile Exchange에서 Other Formats에 대해 자세히 알아보기

제품


릴리스

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by