Выберите правильную матрицу, которая удовлетворяет справедливому условию

#matlab #matrix

#matlab #матрица

Вопрос:

У меня есть набор w матриц в 3D.

 w(:,:,1) =
    0.7791    0.0956    0.4664
    0.4257    0.4965    0.6954

w(:,:,2) =
    0.7791    0.1300    0.4749
    0.4257    0.7335    0.4552

w(:,:,3) =
    0.8823    0.7335    0.4664
    0.3944    0.1300    0.6954

w(:,:,4) =
    0.8823    0.4965    0.4749
    0.3944    0.0956    0.4552
  

Я хочу получить минимум каждой строки каждой матрицы.

 minEach=min(w,[],2);
minMat=reshape(minEach,[2 4])
  

Это дает

 minMat =    
    0.0956    0.1300    0.4664    0.4749
    0.4257    0.4257    0.1300    0.0956
  

Теперь я хочу выбрать столбец с довольно высокими значениями, что означает, что каждое значение в столбце должно быть значительно лучше, чем в других столбцах. Например, 4-й столбец имеет наилучшее значение, но его другое значение очень низкое. Итак, что я сделал, я получаю минимум каждого столбца и выбираю максимум.

 minAll=max(min(minMat)) 
minAll =    
    0.1300
  

Затем у меня есть 2 варианта, в которых я выбираю максимум из двух других значений, где 3-й столбец является лучшим выбором (я не знаю, как этот шаг выполняется в Matlab). Затем я должен получить соответствующую w матрицу, которая есть w(:,:,3) .

Вопрос: В общем, w включает n в себя количество матриц, каждая w(:,:,i) из которых имеет p x q размер. Я действительно не понимаю, как я могу выбрать правильную w(:,:,i) матрицу, которая удовлетворяет справедливому условию. В частности, if w(:,:,i) is 5x6 и minAll значение могут быть в 3 столбцах. Затем я должен повторять ту же процедуру снова и снова.

Было бы здорово, если бы кто-нибудь мог меня направить.

Ответ №1:

Следующие шаги:

найдите инкиды столбцов, содержащих 0,13

извлеките эти столбцы и объедините их в новую матрицу

В этой матрице найдите индексы столбцов, содержащих максимальное значение

затем получите индекс w idx

 [~,c,~]=find(minMat == minAll);
minMat_selected= minMat(:,c);
[~,cc,~] = find(minMat_selected == max(minMat_selected(:)));
idx = c(cc(1));
w(:,:,idx)