【问题标题】:MATLAB : Obtain a matrix by adding its last lines to the first lines of the basic matrixMATLAB:通过将其最后一行添加到基本矩阵的第一行来获得一个矩阵
【发布时间】:2020-12-22 16:38:59
【问题描述】:

我有一个矩阵B,我想从B 获得一个新矩阵C,方法是将其最后的w*a 行添加到第一个w*a 行(wa 将后定义)。

我的矩阵B一般定义为:

我想通过以下方式获得以一般方式定义的矩阵C

矩阵BC的特征是:

  • Lw 是定义的实际值;
  • B0,B1,...,Bw 的尺寸:a by b;
  • B 的维度是:[(L+w)×a] by (L×b);
  • C 的维度为:(L×a) by (L×b)

示例:对于L = 4w = 2,我得到以下矩阵B

w*a = 2*1 = 2 的最后一行 B 是:

B 的第一行 w*a = 2*1 = 2 是:

通过添加我们得到的两个矩阵:

那么得到的矩阵C就是:

对于B0 = [1 0]B1 = [0 1]B2 = [1 1]。我们得到:

  • B0B1B2 的维度为 a by b1 by 2;
  • B 的维度为:[(L+w )×(a)] by (L×b)[(4+2)×1] by (4×2)6 by 8;
  • C 的维度为:(L×a) by (L×b)(4×1) by (4×2)4 by 8

我得到的矩阵BC如下:

B = 

    1    0    0    0    0    0    0    0
    0    1    1    0    0    0    0    0
    1    1    0    1    1    0    0    0
    0    0    1    1    0    1    1    0
    0    0    0    0    1    1    0    1
    0    0    0    0    0    0    1    1

C = 

    1    0    0    0    1    1    0    1
    0    1    1    0    0    0    1    1 
    1    1    0    1    1    0    0    0
    0    0    1    1    0    1    1    0 

我想对如何编程这个结构有一些建议,以便从给定的矩阵B 我可以推导出矩阵C

【问题讨论】:

  • 只需将矩阵 B 分成两部分,然后将第二部分添加到第一部分的相应行中。我猜你的问题有点过于复杂了。
  • 好的,注意了。谢谢。
  • 请编辑问题以包含矩阵as tables。请考虑these reason and guidelines,了解为什么在这种情况下应该包含图片。
  • 好的@bad_coder.

标签: arrays matlab matrix linear-algebra


【解决方案1】:

Matlab 的range indexing 应该可以帮助您通过几个步骤完成此操作。要记住的关键是范围是包含的,即A[1:3] 是一个三个 3x1 矩阵,您可以使用关键字 end 自动索引矩阵行或列的末尾。

%% Variables from OP example

w = 2;
L = 4;

B0 = [1 0];
B1 = [0 1];
B2 = [1 1];
[a, b] = size(B0);

% Construct B
BX = [B0;B1;B2]
B = zeros((L+w)*a, L*b);
for ii = 0:L-1
   B(ii+1:ii+w+1, ii*b+1:ii*b+b) = BX;
end

%% Construct C <- THIS PART IS THE ANSWER TO THE QUESTION

% Grab first rows of B
B_first = B(1:end-w*a, :) % Indexing starts at first row, continues to w*a rows before the end, and gets all columns
% Grab last rows of B
B_last = B(end-w*a+1:end, :); % Indexing starts at w*a rows before the end, continues to end. Plus one is needed to avoid off by one error. 
% Initialize C to be the same as B_first
C = B_first;
% Add B_last to the first rows of C
C(1:w*a, :) = C(1:w*a, :) + B_last;

我得到了输出

C =

     1     0     0     0     0     0     1     1     0     1
     0     1     1     0     0     0     0     0     1     1
     1     1     0     1     1     0     0     0     0     0
     0     0     1     1     0     1     1     0     0     0
     0     0     0     0     1     1     0     1     1     0

【讨论】:

  • 感谢您的回答@Cecilia。它很好地回答了我的问题。但请注意:在矩阵B 的构造级别上,循环从0L-1 而不是从0L(在这种情况下,我们获得了一个矩阵@987654331维度为7 的@ 由10 而不是68 和维度为C 的矩阵510 而不是48 组成。
  • 噢!我什至说要注意包容性范围!这是 Matlab 的特质之一,它总是让我着迷。
  • 好的,谢谢@Cecilia。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-28
相关资源
最近更新 更多