поиск индексов min или max, рассчитанных в диапазоне массива или матрицы в matlab - PullRequest
0 голосов
/ 26 сентября 2018

Если у меня есть матрица

A=rand(50,4);

и матрица значений диапазона, таких как

range=[1 10 15 30 45 50];

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

for i=1 :numel(range)-1
[value index]= find(min(A(range(i):range(i+1),[],1)

if i>1
            index=index+ range(i)+1;       % indx# was calculated onlyin a 
                                              % range of array and not for 
                                             %whole array.Updated here
 end

B_ind(i,:)=index;
B_val(i,:)=value;
end

Как я могу получить индексы min(A) для range(i:i+1) без использования циклического подхода?

Проще говоря, матрица 'B' должна быть похожа на

B(1,column 1:4)=index of min(A (1:10))   in every column

B(2,column 1:4)=index of min(A (11:15))  in every column

B(3,column 1:4)=index of min(A (16:30))  in every column

и так далее ...

Мой вопрос: как это сделать без цикла for?

1 Ответ

0 голосов
/ 26 сентября 2018

Одна возможность будет:

% generate example data set
A=rand(50,4);
range=[1 10 15 30 45 50];

% generate indexes of interest
tmp_idx= arrayfun(@colon,range(1:end-1),range(2:end),'un',0);
% calculate the min function over the indexes
[min_value,min_idx]=cellfun(@(x) min(A(x,:)), tmp_idx, 'UniformOutput', false);
% get matrix B (with the offset of ranges)
B=cell2mat(min_idx')+(range(1:end-1)+1)';
B(1,:)=B(1,:)-2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...