Найти минимум по строкам и подсчитать общее количество минимумов по каждому столбцу в Matlab - PullRequest
2 голосов
/ 07 марта 2020

Мне нужно сначала найти минимальное значение в каждой строке среди Column_A, Column_B и Column_ C, а затем получить общее количество минимальных значений, найденных под каждым из этих столбцов в Matlab. Например, таблица выглядит следующим образом:

Column_A = [1.5;200;300;-1.5;49];
Column_B = [100.5;2;1;0;1];
Column_C= [1.25;500;3;0.01;200];
T = table(Column_A,Column_B,Column_C)

Таблица (T) с минимальным значением в каждой строке в столбцах Column_A, Column_B и Column_ C выделена оранжевым :

enter image description here

Я хочу создать следующий вывод, который показывает общее количество минимальных значений для Column_A, Column_B и Column_ C:

enter image description here

Ответы [ 2 ]

2 голосов
/ 07 марта 2020

Вы можете применить следующее решение:

  • Преобразовать таблицу T в числовую матрицу.
  • Найти индекс минимума по строкам.
  • Подсчитать число элементы каждого индекса с использованием histcounts .
  • Создание новой таблицы в нужном формате.

Вот код:

% Build sample input:
Column_A = [1.5;200;300;-1.5;49];
Column_B = [100.5;2;1;0;1];
Column_C= [1.25;500;3;0.01;200];
T = table(Column_A,Column_B,Column_C);

% Convert T to matrix
A = T{:, :};

% Find minimum across rows, and the index of the minimum:
% You may ignore M: [~, I] = min(A, [], 2);
[M, I] = min(A, [], 2); % M = [1.25, 2, 1, -1.5, 1]', and I = [3, 2, 2, 1, 2]

% Compute total count of the minimum values under each column, by collecting histogram:
Minimum_Count = (histcounts(I, size(A, 2)))';

% Build output table:
Columns = T.Properties.VariableNames'; % Get columns names from T
T2 = table(Columns, Minimum_Count);

Результат:

T2 =

  3×2 table

     Columns      Minimum_Count
    __________    _____________

    'Column_A'          1      
    'Column_B'          3      
    'Column_C'          1      
2 голосов
/ 07 марта 2020
Column_A = [1.5; 200; 300; -1.5; 49];
Column_B = [100.5; 2; 1; 0; 1];
Column_C = [1.25; 500; 3; 0.01; 200];

% create matrix
M = [Column_A, Column_B, Column_C];

% find min in each row
min_values = min(M, [], 2) == M;
count_T = sum(min_values);

% create table
Columns = ['Column_A'; 'Column_B'; 'Column_C'];
T = table(Columns, count_T');
T.Properties.VariableNames([2]) = {'Minimum Count'};
disp(T)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...