我有一个给定的矩阵H
,我想通过以下方法展开(展开)它以找到一个矩阵B
:
设H
维度矩阵m × n
。让x = gcd (m,n)
H
分为两部分。c = n/x
单元向右交替移动(我们将c
单元向右移动几次)来进行的。c-b = m/x
向下移动单位(即b = (n-m)/x
)(b
向下移动单位几次)。例:让H
维的矩阵m × n = 5 × 10
定义为:
1 0 1 1 1 0 1 1 0 0
0 1 1 0 0 1 1 0 1 1
1 1 0 1 1 1 0 1 0 0
0 1 1 0 1 0 1 0 1 1
1 0 0 1 0 1 0 1 1 1
x = gcd (m,n) = gcd (5,10) = 5
,c = n/x = 10/5 = 2
,b = (n-m)/x = (10-5)/5 = 1
。H
分为两部分。切割模式如下:c = 2
单位向右移动几次,将单位向右移动c = 2
,c - b = 1
单元向下移动。备注:在矩阵X
,X1
和X2
短划线是零。
B
为(L
is factor):有什么建议么?
这可以通过创建具有切割图案的逻辑遮罩,然后逐个将输入乘以遮罩及其否定值来实现。L
可以使用来重复blkdiag
。
H = [1 0 1 1 1 0 1 1 0 0
0 1 1 0 0 1 1 0 1 1
1 1 0 1 1 1 0 1 0 0
0 1 1 0 1 0 1 0 1 1
1 0 0 1 0 1 0 1 1 1];
L = 2;
[m, n] = size(H);
x = gcd(m, n);
c = n / x;
b = (n-m)/x;
mask = repelem(tril(true(m/b)), b, c);
A = [H.*mask; H.*~mask];
A = repmat({A}, L, 1);
B = blkdiag(A{:});