首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从现有矩阵中提取数据

从现有矩阵中提取数据
EN

Stack Overflow用户
提问于 2010-10-27 06:39:46
回答 3查看 1.3K关注 0票数 0

我有一个包含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

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-27 06:59:52

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

代码语言:javascript
复制
Px = reshape(P, 24, []);

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

代码语言:javascript
复制
P100 = P(:,100);
票数 2
EN

Stack Overflow用户

发布于 2010-10-27 06:46:36

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

代码语言:javascript
复制
foreach (var currentIndexInLargerMatrix : int = 0 to 4320)
begin
  matrixToPutItIn := currentIndexInLargerMatrix div 24;
  indexInNewMatrix := currentIndexInLargerMatrix mod 24;
end

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

这显然不是完整的代码,但应该可以帮助您入门。

票数 0
EN

Stack Overflow用户

发布于 2010-10-27 22:38:03

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

然而,如果你真的想/需要创建180个独立的变量,从P1P180,我们已经在其他问题中讨论过了,比如this one。在您的例子中,您可以像这样使用函数EVAL

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4028640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档