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

 Akzeptierte Antwort

Image Analyst
Image Analyst am 29 Apr. 2015

1 Stimme

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 Kommentare

ajk1
ajk1 am 29 Apr. 2015
Bearbeitet: ajk1 am 29 Apr. 2015
Thank you for your help, I have made a modification to the question and I would appreciate if you could help with this too. Sorry about that.
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 am 29 Apr. 2015
Thank you!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Startup and Shutdown finden Sie in Hilfe-Center und File Exchange

Gefragt:

am 29 Apr. 2015

Kommentiert:

am 29 Apr. 2015

Community Treasure Hunt

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

Start Hunting!

Translated by