특정 방식으로 행렬 연결

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