특정 방식으로 행렬 연결
Sep 27 2020
형식의 매트릭스로 시작하는 우아한 방법이 있습니까?
$$ A = (B,C) $$ 여기서 B와 C의 차원은 nxm이고 다음과 같은 큰 행렬을 구성합니다.
$$ \begin{pmatrix} B & C & \mathbf{0} & \mathbf{0}&\ddots&\mathbf{0}\\ \mathbf{0} & B & C & \mathbf{0}&\ddots&\mathbf{0}\\ \ddots &\ddots &\ddots &\ddots &\ddots&\mathbf{0}\\ \mathbf{0} &\mathbf{0} &\mathbf{0} &\mathbf{0} & \mathbf{0} & B \end{pmatrix} $$
어디 $\mathbf{0}$B와 C와 차원이 같은 제로 행렬은 무엇입니까? 이 행렬 변수의 크기를 유지하고 싶습니다.
답변
4 kglr Sep 27 2020 at 06:26
dims = {3, 2};
{bB, cC} = Array[#, dims] & /@ {b, c};
Row[MatrixForm /@ {bB, cC}, Spacer[10]]
k = 4;
kdims = k dims;
SparseArray[{Band[{1, 1}, kdims] -> {bB},
Band[{1, dims[[2]] + 1}, kdims] -> {cC}}, kdims] // MatrixForm
2 Alan Sep 27 2020 at 06:33
build[mB_, mC_, nZs_] := With[{
m = Length@mB,
n = Length@mB[[1]]},
Module[{base, len},
len = n*(2 + nZs);
base = PadRight[ArrayFlatten[{{mB, mC}}], {m, len}, 0];
Catenate@Table[PadLeft[base[[All,;; n*(2 + nZs - i)]], {m, len}, 0], {i,0, nZs + 1}]
]]
예를 들면 :
m = 3
n = 2
mB = RandomInteger[100, {m, n}]
mC = RandomInteger[100, {m, n}]
nZs = 3
build[mB, mC, nZs] // MatrixForm