【问题标题】:Extracting Columns iteratively from 2 different m-by-n matrices and concatenating in a set of n different m-by-2 matrices从 2 个不同的 m×n 矩阵中迭代提取列并连接到一组 n 个不同的 m×2 矩阵中
【发布时间】:2014-12-09 17:30:29
【问题描述】:

MATLAB:

在 MATLAB 中,

我有 2 m×n 个矩阵,A 和 B。我想制作一组 n

m×2 矩阵,例如在 ith 矩阵(n 的集合)中,第一列将是 ith

来自 A 的列和第二列将是来自 B 的 ith 列。

如何从两个矩阵中提取和连接 ith 列?

如何存储这些 n 矩阵?使用循环? (内存?)

示例:

输入:

A = [ 1, 2, 3; 4, 5 ,6; 7, 8, 9] (3x3 矩阵)

B = [ 11, 22, 33; 44, 55 ,66; 77, 88, 99] (3x3 矩阵)

输出:

对于 i=1:3

C1 = [1, 11; 4, 44; 7, 77]

C2 = [2, 22; 5, 55; 8, 88]

C3 = [3, 33; 6, 66; 9, 99]

【问题讨论】:

  • 请澄清您的具体问题或添加其他详细信息以准确突出您的需要。正如目前所写的那样,很难准确地说出你在问什么。请参阅How to Ask 页面以获得澄清此问题的帮助。
  • 我想您可能正在寻找两个矩阵的交错列。这篇文章stackoverflow.com/questions/7142251/… 展示了如何交错行。要将其转换为列,请先转置AB,然后转置结果。
  • @Schorsch 我想我通过添加示例改进了我的问题。请看,我的问题现在清楚了吗?
  • 使用连接和permute 构建3D 数组,而不是n 单独的矩阵

标签: arrays matlab loops memory matrix


【解决方案1】:

我要做的第一件事是更改变量名称。这主要是为了让引用变量更容易,尤其是当 mn 发生变化时。而不是写

C1(:,:)
C2(:,:)
...
Cn(:,:)

我要写了

C(:,:,1)
C(:,:,2)
...
C(:,:,n)

我所做的只是将索引从变量名移动到第三维的索引。

现在,创建C 数组:

A = [ 1, 2, 3; 4, 5 ,6; 7, 8, 9]
B = [ 11, 22, 33; 44, 55 ,66; 77, 88, 99]

[m,n]=size(A)

C = reshape([A',B']', m, 2, n)

这个的输出是:

A =

   1   2   3
   4   5   6
   7   8   9

B =

   11   22   33
   44   55   66
   77   88   99

m =  3
n =  3
C =

ans(:,:,1) =

    1   11
    4   44
    7   77

ans(:,:,2) =

    2   22
    5   55
    8   88

ans(:,:,3) =

    3   33
    6   66
    9   99

如您所见,C(:,:,1) 在您的示例中等于 C1C(:,:,2) = C2 等等。随着AB 的大小发生变化,这种情况不会发生变化。你永远不必想出新的变量名。要知道您有多少个 m-by-2 矩阵,您所要做的就是

numVars = size(C,3);

注意:这使用了与此处答案中相同的技术:matlab - how to merge/interlace 2 matrices?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 2013-11-30
    相关资源
    最近更新 更多