MATLAB:通过将最后一行添加到基本矩阵的第一行来获得矩阵
MATLAB : Obtain a matrix by adding its last lines to the first lines of the basic matrix
我有一个矩阵 B
,我想通过将最后 w*a
行添加到第一个 [=14] 从 B
获得一个新矩阵 C
=] 行(w
和 a
将在之后定义)。
我的矩阵 B
通常定义为:
我想通过以下方式获得以一般方式定义的矩阵 C
:
矩阵B
和C
的特征是:
L
和w
是定义的实数值;
B0
,B1
,...,Bw
的维度是:a
by b
;
B
的维度:[(L+w)×a]
by (L×b)
;
C
的维度:(L×a)
by (L×b)
.
示例:对于L = 4
和w = 2
,我得到以下矩阵B
:
B
的 w*a = 2*1 = 2
最后一行是:
B
的 w*a = 2*1 = 2
第一行是:
将两个矩阵相加得到:
这样得到的矩阵C
则为:
对于 B0 = [1 0]
、B1 = [0 1]
和 B2 = [1 1]
。我们得到:
B0
、B1
和 B2
的维度是 a
by b
,即 1
by 2
;
B
的维度是:[(L+w )×(a)]
by (L×b)
即 [(4+2)×1]
by (4×2)
即 6
by 8
;
C
的维度是:(L×a)
乘以 (L×b)
即 (4×1)
乘以 (4×2)
即 4
乘以 8
。
得到的矩阵B
和C
如下:
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
。
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
我有一个矩阵 B
,我想通过将最后 w*a
行添加到第一个 [=14] 从 B
获得一个新矩阵 C
=] 行(w
和 a
将在之后定义)。
我的矩阵 B
通常定义为:
我想通过以下方式获得以一般方式定义的矩阵 C
:
矩阵B
和C
的特征是:
L
和w
是定义的实数值;B0
,B1
,...,Bw
的维度是:a
byb
;B
的维度:[(L+w)×a]
by(L×b)
;C
的维度:(L×a)
by(L×b)
.
示例:对于L = 4
和w = 2
,我得到以下矩阵B
:
B
的 w*a = 2*1 = 2
最后一行是:
B
的 w*a = 2*1 = 2
第一行是:
将两个矩阵相加得到:
这样得到的矩阵C
则为:
对于 B0 = [1 0]
、B1 = [0 1]
和 B2 = [1 1]
。我们得到:
B0
、B1
和B2
的维度是a
byb
,即1
by2
;B
的维度是:[(L+w )×(a)]
by(L×b)
即[(4+2)×1]
by(4×2)
即6
by8
;C
的维度是:(L×a)
乘以(L×b)
即(4×1)
乘以(4×2)
即4
乘以8
。
得到的矩阵B
和C
如下:
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
。
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