【问题标题】:Append vector to 3d matrix in Matlab在Matlab中将向量附加到3d矩阵
【发布时间】:2016-11-11 23:29:44
【问题描述】:

我希望在现有的 x by y by z 矩阵上附加一个行向量(以及后来的列向量) .所以基本上“为原始 3d 矩阵中的每个 z 添加一个新行(在“底部”)。考虑以下简短的 Matlab 程序

appendVector = [1 2 3 4 5]; % Small matrix for brevity. Actual matrices used are much larger.
origMatrix   = ones(5,5,3);
appendMatrix = [origMatrix( ... ); appendVector];

我的问题是:我如何寻址(使用 Matlab 风格的矩阵寻址,而不是“手动”类 C 循环) origMatrix( ... ) 以附加上面的向量?还可以随意提供有关如何对列向量执行相同操作的建议(我认为执行后者的正确方法是简单地使用 Matlab 中的 '-operator)。

【问题讨论】:

  • 您打算如何将 5 元素向量附加到 3D 矩阵。您需要一个 1 x 5 x 3 数组,因为您需要填充第三个维度。
  • @Suever 我认为这是最终解决方案的一部分。有没有办法只使用一个向量(通过让 Matlab 处理额外的维度)来执行这个操作,还是我必须在追加之前“准备”附加的向量而不是一个 3d 数组(根据你上面的建议)?

标签: matlab matrix vector append


【解决方案1】:

3D 矩阵中的“行”实际上是一个多维数组。

size(origMatrix(1,:,:))
%   5   3

所以要追加一行,您需要追加一个5 x 3 数组。

toAppend = rand(5, 3);
appendMatrix = cat(1, origMatrix, toAppend);

可以仅附加一个 5 元素向量并为第三维指定索引。在这种情况下,第三维中所有其他索引的“行”值将用零填充。

appendVector = [1 2 3 4 5];
origMatrix = ones(5,5,3);

appendMatrix = origMatrix;
appendMatrix(end+1, :, 1) = appendVector;

如果您想沿第三维附加相同的向量,可以使用 repmat 将向量转换为 1 x 5 x 3 数组,然后附加该数组。

appendVector = repmat([1 2 3 4 5], 1, 1, size(origMatrix, 3));
appendMatrix = cat(1, origMatrix, appendVector);

【讨论】:

  • 太棒了。当场。
  • 关于使用 repmat 的片段的简短说明。您提供的代码给出了错误:“使用 cat 连接矩阵的维度不一致。”我没有调查为什么会这样,因为之前的建议(不使用 repmat)足以解决我的问题。
猜你喜欢
  • 2010-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多