2016-12-12 3 views
0

Если у меня есть массив A большого размера, и мне нужно перебирать его и получать суммы его части, есть ли какая-либо функция библиотеки matlab для получения выражений типа sum (A (- 5: 5)), например, чтобы просто вернуть сумму (A (1: 5)) вместо ошибки и без добавления условий? (или обрабатывать элементы outbounds как они являются нулями)Игнорирование исходящих индексов доступа к матрице

ответ

3

Чтобы обработать исходящий элемент как нули, удалите индекс из доступа. Я предполагаю, что у вас более длинный индексный диапазон и переменные индексы, иначе вы бы просто сделали 1:5, правильно?

for ii: some_array 
    index=-5:5; %I assume you fill this differently 
    index(index<1 || index>size(A,1))=[] % delete out of bounds 
    sum(A(index)) 
end 
3

Это, как я хотел бы сделать это:

A = [10 20 30 40]; % example, 1D 
ind_start = -5; 
ind_end = 5; 
A2 = A(max(ind_start,1):min(ind_end,end)); 

дает

A2 = 
    10 20 30 40 

Затем вы можете применить sum или любой другой функции для A2.

Это работает с N -мерных массивов. Функция end используется в качестве индекса красиво ухаживает соответствующего размера:

A = [10 20 30 40; 11 21 31 41]; % example, 2D 
ind_start = -5; 
ind_end = 5; 
A2 = A(:, max(ind_start,1):min(ind_end,end)); 

дает

A2 = 
    10 20 30 40 
    11 21 31 41 
+0

приятно! Я думаю, мне все еще нравится моя версия: P, ее более явный –

+1

И более общий. Шахта только для индекса толстой кишки –

Смежные вопросы