在MATLAB中,我有五个单个矩阵表示我从Kinect传感器收集的关节骨架数据。每个矩阵的大小约为240-270 x 3(每个矩阵包含该关节的x,y,z数据)。我试图将所有这些关节组合成一个矩阵,所以我可以过滤结果。
X = [J1 J2 J3 J4 J5]
问题是每个矩阵的大小都不一样,所以当我在尝试合并数据时出错。
我希望能够组合这些矩阵,但要使它们具有相同的大小。我无法删除前几行,因为它们是时间同步的,因此每个关节的第一个坐标同时被捕获。但是,我想通过删除矩阵中的最后一行来计算最小矩阵的大小并将其他矩阵重新整形为该大小,这样我就不会丢失重要数据。
这可能吗?
答案 0 :(得分:0)
是的,这是可能的。完全按照你说的做。找到具有最小行数的矩阵,并确保为每个其他矩阵提取到该行索引,然后将它们拼凑在一起:
你有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
来完成所有操作。