извлечение данных из существующей матрицы - PullRequest
0 голосов
/ 27 октября 2010

У меня есть матрица, содержащая 4320 записей

например:

P = [26 29 31 33 35 26 29 .......... 25]

Я хочу создать 180 матриц, и каждая матрица содержит 24 записи, т.е.

1-я матрица содержит 1-е 24 записи

2-я матрица содержит 2-е 24 записи и т. Д.

Я знаю простой метод, но это займет много времени:

Р1 = Р (1:24); Р2 = Р (25:48), .......... Р180 = Р (4297: 4320)

и это сложно, так как у меня огромное количество записей для

исходная матрица P

спасибо

Ответы [ 3 ]

2 голосов
/ 27 октября 2010

Я собираюсь пойти дальше и предположить, что это связано с MATLAB, в этом случае вы будете использовать функцию reshape:

Px = reshape(P, 24, []);

Px теперь будет правильной матрицей, и вы можете получить доступ к каждой из 180 «матриц» (на самом деле векторы строк, вы, кажется, путаете их) с помощью простого синтаксиса MATLAB:

P100 = P(:,100);
0 голосов
/ 27 октября 2010

Я думаю Ваш ответ - лучший способ решить вашу проблему, когда каждая подматрица хранится в виде строки или столбца в более крупной матрице и извлекается путем простого индексирования в эту более крупную матрицу.

Однако, если вы действительно хотите / должны создать 180 отдельных переменных, помеченных P1 - P180, способ сделать это обсуждался в других вопросах, таких как этот .В вашем случае вы могли бы использовать функцию EVAL примерно так:

for iMatrix = 1:180                          %# Loop 180 times
  tempP = P((1:24)+24*(iMatrix-1));          %# Get your submatrix
  eval(['P' int2str(iMatrix) ' = tempP;']);  %# Create a new variable
end
0 голосов
/ 27 октября 2010

Вы можете перебирать элементы в индексе, подсчитывая, создавая новую матрицу каждые 24 записи.Модульная арифметика может помочь:

foreach (var currentIndexInLargerMatrix : int = 0 to 4320)
begin
  matrixToPutItIn := currentIndexInLargerMatrix div 24;
  indexInNewMatrix := currentIndexInLargerMatrix mod 24;
end

во многих языках оператором модуля (остатка) является «mod» или «%».«div» здесь обозначает целочисленное деление.Большинство языков просто используют virgule (косую черту) "/".

Это, очевидно, не полный код, но вам следует начать.

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