我有一个包含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
感谢
答案 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是解决问题的最佳方式,每个子矩阵都作为行或列存储在更大的矩阵中,并通过简单地索引到更大的矩阵来检索。
但是,如果您确实需要/需要创建标记为P1
到P180
的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