что означает следующий код MATLAB - PullRequest
0 голосов
/ 28 июня 2010

, пожалуйста, помогите мне понять этот код:

x(:,i) = mean( (y(:,((i-1)*j+1):i*j)), 2 )';

Я не могу найти это в своей книге. спасибо.

Ответы [ 3 ]

4 голосов
/ 28 июня 2010

Код, который вы разместили, можно сделать более читабельным, используя временные переменные:

        a       = (i-1)*j+1;
        b       = i*j;
        val     = y(:,a:b);
        x(:,i)  = mean( val, 2 )'; %# =mean( val' )

Что именно вы не понимаете?Для значений mean, : и ' обратитесь к справке по MATLAB.

2 голосов
/ 28 июня 2010

Было бы полезно, если бы вы сказали именно то, что вы не понимаете, но вот несколько советов:

  1. , если у вас есть что-то вроде (r, c), это означаетматрица a, строка r, столбец c (всегда в этом порядке).Другими словами, у вас должно быть два элемента в квадратных скобках, разделенных запятой, где первый представляет строку, а второй столбец.

  2. Если у вас есть: один в одном изстороны запятой, что означает «все».Таким образом, если у вас есть (r, :), то у вас будет матрица a, строка r, все столбцы.

  3. Если: не один в одной из сторон запятой, то это будет означать «до».Поэтому, если у вас есть (r, z: y), это означает, что матрица a, строка r, столбцы от z до y.

  4. Среднее = среднее.Формат функции в Matlab: M = среднее (A, тусклый).A будет матрицей, по которой вы берете среднее (или среднее), M будет местом, куда будут идти результаты.Если dim = 1, вы получите вектор строки, где каждый элемент является средним значением столбца.Если dim = 2 (как в вашем случае), то вы должны получить вектор столбца, где каждый элемент является средним значением строки. Будьте осторожны , потому что в конце кода у вас есть ', что означает транспонирование.Это означает, что ваш вектор столбца будет преобразован в вектор строки.

ОК, поэтому ваш код:

x(:,i) = mean( (y(:,((i-1)*j+1):i*j)), 2 )';

Начните с внутреннего бита, то есть

y(:,((i-1)*j+1):i*j)

Итак, это говорит

матрица y (r, c)

, где

r (строка):, то есть все строки

c (столбец) равен ((i-1) j + 1): i j, то есть столбцы идут от (i-1) j + 1 до i j

Ваш код получит матрицу, полученную из того, что я назвал y (r, c), и выполнит следующее:

mean( (y(r,c), 2 )

, поэтому получите результатсверху и взять среднее (среднее) каждого ряда.Поскольку ваш код имеет «потом», то есть у вас есть:

mean( (y(r,c), 2 )'

, тогда он получит вектор столбца и преобразуется в вектор строки.Каждый элемент этой строки будет средним для ряда y (r, c).

Наконец:

x(:,i) = mean( (y(r,c), 2 )';

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

Не должно ли это быть x (i,:) вместо?

1 голос
/ 28 июня 2010

i-й столбец массива x является средним значением i-й группы из j столбцов массива y.

Например, если i равен 1, а j равен 3, 1-й столбецх - среднее из первых трех столбцов у.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...