Создание цикла в MATLAB для поиска средств - PullRequest
1 голос
/ 24 августа 2011

Итак, у меня есть 2 матрицы в MATLAB. Если одна из них представляет собой матрицу 100 X 2, например:

[a b]
[13 19]
[21 39]
[35 45] 

ЭСТ. ЭСТ.

, а другая матрица представляет собой матрицу N X 1 со значениями, подобными этим:

[1]
[3]
[5]
[7]

ЭСТ. ЭСТ.

То, что я пытаюсь сделать, это найти среднее значение всех элементов от 'a' до 'b' 2-й матрицы.

То, что у меня так далеко, это: (Если моя первая матрица называется: MATRIX1

вторая матрица называется: MATRIX2)

a= MATRIX1(1:1)
b= MATRIX1(1:2)
values = MATRIX2(a:b)
mean(values)

это дает мне именно то, что я хочу, среднее значение от a до b. Но как мне создать цикл, чтобы я мог сделать это автоматически для всех строк в MATRIX 1?

Спасибо!

Обновление: Я понял, как получить цикл, но теперь я не уверен, как взять все мои значения и превратить их в матрицу 100 X 1. Это код, который я использовал:

c= size(MATRIX1,1);

for k= 1:c;
    a= MATRIX1(k,1);
    b= MATRIX1(k,2);
    values= MATRIX2(a:b);
    d= mean(values)
end

с этим я получаю 100 значений d. Как поместить эти значения в матрицу 100 X 1?

Ответы [ 4 ]

7 голосов
/ 24 августа 2011

Вот как это сделать с помощью для цикла :

nRows = size(MATRIX1,1);
meanValues = zeros(nRows,1);
for row = 1:nRows
  meanValues(row) = mean(MATRIX2(MATRIX1(row,1):MATRIX1(row,2)));
end

Другой способ сделать это - использовать функцию ARRAYFUN примерно так:

meanValues = arrayfun(@(a,b) mean(MATRIX2(a:b)),MATRIX1(:,1),MATRIX1(:,2));
4 голосов
/ 24 августа 2011

Похоже, меня уже избили, но ради разнообразия, другой вариант, использующий cellfun:

cellfun(@(pair) mean(x(pair(1):pair(2))), num2cell(inds, 2))
3 голосов
/ 24 августа 2011

просто для пояснения вы хотите что-то, что переводит "a" -й элемент в матрице 2 в "b" -й элемент и усредняет все эти значения?

Это должно работать:

[r c] = size(MATRIX1);
myMeans = zeros(r,1);

for i = 1:r
   myMeans(i) = mean(MATRIX2(MATRIX1(i,1):MATRIX1(i,2)))
end

это будет хранить все средства для строк в myMeans

3 голосов
/ 24 августа 2011

Вы почти у цели!

elems = 100
values = zeros(1, elems)
for row = 1:elems
  a= MATRIX1(1:1)
  b= MATRIX1(1:2)
  values(row) = MATRIX2(a:b)
end
mean(values)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...