【问题标题】:MATLAB: Defining n subsets of a matrixMATLAB:定义矩阵的 n 个子集
【发布时间】:2011-07-06 22:31:25
【问题描述】:

我有一个 1974x1 的向量 Upper,我试图将信息分解为每个包含 36 个项目的单独数组。所以,我用长度找到有1974个项目,然后除以36并使用floor函数。我无法弄清楚如何使用n 完成所有操作。

这是我的逻辑:我定义n 是为了找出需要定义的子集的数量。然后,我试图让子集成为子集 1、子集 2、...、子集 36。但是,MATLAB 仅将矩阵子集定义为 1x36 矩阵。但是,此矩阵包含应包含的子集 1 (1...36)。大家对新手有什么建议吗?我做错了什么?

binSize = 36;
nData = length(Upper);
nBins = floor(nData/36);
nDiscarded = nData  - binSize*nBins;

n=1:binSize;
subsetn= [(n-1)*binSize+1:n*binSize];

【问题讨论】:

  • 您能否简化您的示例并给出一些具体的预期结果:假设Upper5x1(实际上,假设它等于[10; 11; 12; 13; 14])并且binSize 是2。 subset1subset2subset3 应该有什么值? subsetn 的值应该是什么?
  • 感谢您的回复!这是一个示例:如果 Upper 是 5x1 并且 binSize 是 2,则将有 2 个子集。子集 1 将是 [1 2],子集 2 将是 [3 4]。在您的示例中, 5 将被丢弃。 subsetn 不应该存在,我写它是因为我想简化创建subset1 和subset2 的过程。

标签: arrays matlab vector matrix


【解决方案1】:

您可以创建一个 54x36 数组,其中 nth 列是您的 nth 子集。

subsetArray=reshape(x(1:binSize*nBins),[],nBins);

您可以以subsetArray(:,n) 的身份访问nth 子集

【讨论】:

  • 36改成binSize?
  • 谢谢,这是个好主意。我遇到的一个问题是每列中有 54 个项目,而不是应有的 36 个项目。我应该如何调整它,以便每列中有 36 个连续条目,并且 subsetArray 是一个 36x54 矩阵?抱歉,我真的很陌生!
  • @Alex:请立即查看。该行中的 36 应该是 54,已替换为 nBins 以使其通用。
  • 非常感谢 yoda,我真的被卡住了!对我来说,你给的建议很好:P
【解决方案2】:

如果我误解了你想要做什么,请提前道歉。

我认为以下小技巧可能会做你想做的事(它很hacky,但我不是Matlab专家):

[a, b] = meshgrid(0:nBins-1, 0:binSize-1)
inds = a*binSize + b + 1

现在inds 是一个 nBins*binSize 索引矩阵。你可以用它来索引 Upper 像

Upper(inds)

它应该将子集作为结果矩阵中的列提供给您。

编辑:看到尤达的回答,他的更好;)

【讨论】:

    猜你喜欢
    • 2014-05-18
    • 1970-01-01
    • 2013-06-18
    • 2014-07-15
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多