block_diagonal

ReservoirComputing.block_diagonalFunction
block_diagonal([rng], [T], dims...;
    weight=1, block_size=1,
    return_sparse=false)

Creates a block‐diagonal matrix consisting of square blocks of size block_size along the main diagonal (Ma et al., 2023). Each block may be filled with

  • a single scalar
  • a vector of per‐block weights (length = number of blocks)

Equations

\[W_{i,j} = \begin{cases} w_b, & \text{if }\left\lfloor\frac{i-1}{s}\right\rfloor = \left\lfloor\frac{j-1}{s}\right\rfloor = b,\; s = \text{block\_size},\; b=0,\dots,nb-1, \\ 0, & \text{otherwise,} \end{cases}\]

Arguments

  • rng: Random number generator. Default is Utils.default_rng().
  • T: Element type of the matrix. Default is Float32.
  • dims: Dimensions of the output matrix (must be two-dimensional).

Keyword arguments

  • weight:
    • scalar: every block is filled with that value
    • vector: length = number of blocks, one constant per block
    Default is 1.0.
  • block_size: Size(s) of each square block on the diagonal. Default is 1.0.
  • return_sparse: If true, returns the matrix as sparse. SparseArrays.jl must be lodead. Default is false.

Examples

# 4×4 with two 2×2 blocks of 1.0
julia> W1 = block_diagonal(4, 4; block_size=2)
4×4 Matrix{Float32}:
 1.0  1.0  0.0  0.0
 1.0  1.0  0.0  0.0
 0.0  0.0  1.0  1.0
 0.0  0.0  1.0  1.0

# per-block weights [0.5, 2.0]
julia> W2 = block_diagonal(4, 4; block_size=2, weight=[0.5, 2.0])
4×4 Matrix{Float32}:
 0.5  0.5  0.0  0.0
 0.5  0.5  0.0  0.0
 0.0  0.0  2.0  2.0
 0.0  0.0  2.0  2.0
source

References