【问题标题】:MATLAB Make Matrices same sizeMATLAB 使矩阵大小相同
【发布时间】:2016-03-08 06:57:00
【问题描述】:

在 MATLAB 中,我有五个代表我从 Kinect 传感器收集的关节骨骼数据的单个矩阵。每个矩阵的大小大约为 240-270 x 3(每个矩阵都包含该关节的 x、y、z 数据)。我正在尝试将所有这些关节组合成一个矩阵,以便过滤结果。

X = [J1 J2 J3 J4 J5]

问题是每个矩阵的大小都不相同,所以目前我在尝试合并数据时遇到错误。

我希望能够组合这些矩阵,但使它们的大小相同。我无法删除前几行,因为它们是时间同步的,因此同时捕获了每个关节的第一个坐标。但是,我想通过删除矩阵中的最后一行来计算最小矩阵的大小并将其他矩阵重塑为该大小,这样我就不会丢失重要数据。

这样可以吗?

【问题讨论】:

  • 零填充,或使用单元格/结构。

标签: matlab matrix


【解决方案1】:

是的,这是可能的。照你说的做。找到行数最少的矩阵,并确保为每个其他矩阵提取到该行索引,然后将它们拼凑在一起:

您有 5 个单独的矩阵,因此找到每个矩阵的行大小然后找到最小值是很多代码。我会将所有矩阵放在一个元胞数组中,然后调用cellfun 以一次性找到每一行的大小,然后按照我上面所说的进行:

%// Build cell array of all matrices
J = {J1, J2, J3, J4, J5};

%// Find rows of all matrices
rows = cellfun(@(x) size(x,1), J);

%// Find the smallest amount of rows
min_row = min(rows);

%// Create a new matrix that ensures that we only sample up to that many
%// rows for each matrix
X = cell2mat(cellfun(@(x) x(1:min_row,:), J, 'uni', 0);

最后一个cellfun 调用与第一个不同,因为输出的是一组矩阵,而不是一组奇异值。因此,您必须设置 'uni=0' 标志以让 MATLAB 知道输出将不再是奇异值。相反,每个截断的矩阵都在自己的单元格中,因此要将所有单元格拼凑在一起,您需要使用 cell2mat 来完成。

【讨论】:

  • 没问题。如果您不再需要帮助,请考虑接受我的回答。这可以通过单击我帖子顶部的复选标记来完成,位于向上和向下投票按钮下方的左侧。祝你好运!
猜你喜欢
  • 1970-01-01
  • 2015-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多