Help with indexing problem.

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

 采纳的回答

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 个评论

ajk1
ajk1 2015-4-29
编辑:ajk1 2015-4-29
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"?
Thank you!

请先登录,再进行评论。

更多回答(0 个)

类别

帮助中心File 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