从现有矩阵中提取数据

时间:2010-10-26 22:39:46

标签: matlab matrix

我有一个包含4320个条目的矩阵

例如:

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

我想创建180个矩阵,每个矩阵包含24个条目,即

第一个矩阵包含前24个条目

第二个矩阵包含第二个24个条目,依此类推

我知道一种简单的方法,但需要很长时间才能实现:

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

因为我有大量的

条目,所以很难

原始矩阵P

感谢

3 个答案:

答案 0 :(得分:2)

我将继续并假设这是与MATLAB相关的,在这种情况下,您将使用reshape函数:

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

Px现在将是一个合适的矩阵,您可以通过简单的MATLAB语法访问180个“矩阵”中的每一个(实际上是行向量,您似乎混淆了两者):

P100 = P(:,100);

答案 1 :(得分:0)

您可以遍历索引中的项目,向上计数,每24个条目创建一个新矩阵。模块化算术可能会有所帮助:

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

在许多语言中,模数(余数)运算符是“mod”或“%”。 “div”在这里表示整数除法。大多数语言只使用virgule(斜杠)“/”。

这显然不是完整的代码,但应该让你开始。

答案 2 :(得分:0)

我认为You's answer是解决问题的最佳方式,每个子矩阵都作为行或列存储在更大的矩阵中,并通过简单地索引到更大的矩阵来检索。

但是,如果您确实需要/需要创建标记为P1P180的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