Help with indexing problem.

조회 수: 1 (최근 30일)
ajk1
ajk1 2015년 4월 29일
댓글: ajk1 2015년 4월 29일
Hi, I would like help with this indexing problem. I have a 5x3 matrix called 'P_table' and I want to find the sum for all the rows and subtract the maximum value of each row. Also I would like to know how to use the index to check which column the maximum value is for each row in a variable 'column', if a specific column does not contain any maximum value then all the elements in that column are zeroed. Thanks.
for ite=1:length(P_table)
P_max = find(max(P_table(ite,:),[],2));
P_max = P_table(P_max);
P_sum=sum(P_table,2)-P_max;
end
For example if
P_table=
0.2432 0.3687 0.2879
0.2225 0.5833 0.3497
0.2485 0.4484 0.4167
0.2859 0.2019 0.2720
1.0000 0.6313 0.4401
Then column=
2
2
2
1
1
Since column 3 does not contain any of the maximum values it is zeroed.
P_table=
0.2432 0.3687 0
0.2225 0.5833 0
0.2485 0.4484 0
0.2859 0.2019 0
1.0000 0.6313 0
P_sum=
0.2432
0.2225
0.2485
0.2019
0.6313

채택된 답변

Image Analyst
Image Analyst 2015년 4월 29일
Instead of a for loop, use the appropriate input and output arguments of sum() and max():
P_table=[...
0.2432 0.3687 0.2879
0.2225 0.3497 0.5833
0.2485 0.4484 0.4167
0.2859 0.2019 0.2720
1.0000 0.6313 0.4401]
% Vectorized approach:
% Find sums of rows, going across all columns.
rowSums = sum(P_table, 2)
% Find maximas in each row and the column where it occurs.
[rowMaxima, columsOfMaxima] = max(P_table, [], 2)
% Compute the difference.
P_sum = rowSums - rowMaxima
It gives you exactly what you showed.
  댓글 수: 3
Image Analyst
Image Analyst 2015년 4월 29일
New code to delete columns with no max in them:
P_table=[...
0.2432 0.3687 0.2879
0.2225 0.3497 0.5833
0.2485 0.4484 0.4167
0.2859 0.2019 0.2720
1.0000 0.6313 0.4401]
% Vectorized approach:
% Find sums of rows, going across all columns.
rowSums = sum(P_table, 2)
% Find maximas in each row and the column where it occurs.
[rowMaxima, columsOfMaxima] = max(P_table, [], 2)
% Compute the difference.
P_sum = rowSums - rowMaxima
% Get rid of any columns that don't contain at least one maximum
[rows, columns] = size(P_table)
columnsToDelete = setdiff(1:columns, unique(columsOfMaxima))
if ~isempty(columnsToDelete)
% Delete those columns
P_table(:, columnsToDelete) = [];
end
If this answers the question, can you mark it as "Accepted"?
ajk1
ajk1 2015년 4월 29일
Thank you!

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

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Startup and Shutdown에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by