2010-10-26 6 views
0

У меня есть матрицы, содержащей 4320 записейизвлечения данных из существующей матрицы

, например:

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

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

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

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

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

P1 = P (1:24), P2 = P (25:48), ......... .P180 = P (4297: 4320)

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

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

благодаря

+1

Какой это язык? – climbage

ответ

2

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

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

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

P100 = P(:,100); 
0

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

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

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

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

+0

Извините, я забыл упомянуть, что я использую программу MATLAB – user488182

0

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

Однако, если вам действительно нужно/нужно создать 180 отдельных переменных, обозначенных как -, способ сделать это обсуждается в других вопросах, таких как this one. В вашем случае вы можете использовать функцию 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

Спасибо всем за эту помощь – user488182

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