Indicizzazione matriciale

boolilood
Ho delle difficoltà ad interpretare la notazione utilizzata in questo paper.
Per la precisione, non mi è chiaro l'utilizzo del doppio pedice, il quale viene definito a pagina 3.

Per prima cosa, viene presentato tramite l'operatore $\text{Vec}(\cdot)$, il quale viene definito come
the column vector formed from elements of a $p\times p$ matrix, $S$, taken columnwise [...] i.e.
\begin{equation*}\operatorname{Vec}'(S)=\underline{s}'=s_{11}, s_{21}, s_{31}, \cdots, s_{12},s_{22}, s_{32}, \cdots, s_{13}, s_{23}, s_{33}, \cdots, s_{pp} \end{equation*}
double subscripts, $ij$, are used to denote elements of this vector, the first subscript always being nested within the second.


Secondo la tipica definizione che si trova in letteratura, $\text{Vec}(\cdot)$ trasforma una matrice in un vettore colonna incolonnando una sopra l'altra le colonne della matrice considerata. Formalmente, se $S$ è una matrice $p\times p$ e le sue colonne sono $S_1$, ..., $S_p$ (che a loro volta sono vettori colonna contenenti $p$ elementi) allora $\text{Vec}(S)$ è il vettore colonna (contenente $p\cdot p$ elementi) cosi definito
\begin{equation}\operatorname{Vec}(S)\triangleq \begin{bmatrix}S_1 \\ \vdots \\ S_p\end{bmatrix}\end{equation}
quindi, assumendo che effettivamente il paper citato assuma la definizione "standard" per l'operatore $\text{Vec}(\cdot)$, deduco che $s_{ij}$ è l'elemento di riga $i$ e colonna $j$ della matrice $S$.

Continuando a leggere il paper
Double subscripts will also be used to represent rows or columns of certain matrices.

Quindi sembra che un elemento di una matrice sia indicizzato da una coppia di doppi indici piuttosto che, come si usa tipicamente fare, da una coppia di singoli indici. In altre parole, sembra che l'elemento di una matrice sia individuato da quattro indici piuttosto che due. Ed è qui che sostanzialmente io mi perdo, non comprendo come funziona questo tipo di codifica.

Tornando al paper
For example, a typical element of the direct product $A\otimes B$ will be denoted by $[A\otimes B]_{ij,gh}$ where
\begin{equation*}[A\otimes B]_{ij, gh}=a_{jh}b_{ig}\end{equation*}

Ora io credo che per "direct product" l'autore intenda quello che Wikipedia definisce come prodotto di Kronecker, ossia
\begin{equation}A\otimes B \triangleq \begin{bmatrix}
a_{11}B & \cdots & a_{1n}B \\
\vdots & & \vdots \\
a_{m1}B & \cdots & a_{mn}B
\end{bmatrix}\end{equation}
dove $m$ ed $n$ sono il numero di righe e colonne contenute nella matrice $A$, mentre $a_{rs}$ è l'elemento di riga $r$ e colonna $s$ della matrice $A$. Se effettivamente l'autore intende per "direct product" il prodotto di Kronecker appena definito, allora si spiegherebbe l'utilizzo di quattro indici piuttosto che due.
Infatti, sempre in accordo a Wikipedia, il prodotto di Kronecker è definito elemento per elemento dall'equazione
\begin{equation}[A\otimes B]_{p(r-1)+v, q(s-1)+w}=a_{rs} b_{vw}\end{equation}
dove $p$ e $q$ sono il numero di righe e colonne contenute nella matrice $B$, mentre $b_{vw}$ è l'elemento di riga $v$ e colonna $w$ della matrice $B$.

Secondo $(4)$, l'indice di riga di un elemento di $A\otimes B$ è funzione degli indici $r,v$ mentre l'indice di colonna è funzione di $s,w$. Quindi un elemento di $A\otimes B$ è individuato dai quattro indici $r,v,s,w$.
Da questo fatto deduco che l'autore del paper definisce implicitamente $ij$ e $gh$ non come (banalmente uno sarebbe portato a pensare) i prodotti $i\cdot j$ e $g\cdot h$, ma invece come
\begin{equation}\begin{aligned}
ij&\triangleq p(j-1)+i \\
gh&\triangleq q(h-1)+g
\end{aligned}\end{equation}
dove $p$ e $q$ sono le dimensioni della matrice $B$.

Tuttavia tutto quello che ho scritto è semplicemente un tentativo che cerca di spiegare il significato del doppio pedice. Non so quanto di giusto ci sia nel mio ragionamento, per questo mi farebbe piacere aver un qualche parere esterno.

Ringrazio anticipatamente per l'attenzione dedicata nel leggermi.

Risposte
apatriarca
Ogni volta che scrive due indici uno dopo l'altro sembra supporre che il primo sia quello "interno" e il secondo quello "esterno". Siccome suppone che le matrici siano memorizzate in formato "column-major", hai effettivamente che le righe variano più velocemente delle colonne. Nel primo esempio i due indici corrispondono alle righe e colonne della matrice d'ingresso, dove il primo corrisponde alle righe e il secondo alle colonne. Quindi l'operatore \(Vec(S)\) corrisponde effettivamente all'operatore che prende le colonne di \(S\) e le mette una sotto l'altra.

Passando all'altro esempio (il prodotto di Kronecker effettivamente) hai una matrice formata da sotto matrici. In questo caso hai quindi quattro indici: due per la matrice \(A\) più esterna e due per quella \(B\) più interna. Siccome scrive prima quelli interni e poi gli esterni \(ij,gh\) corrisponde alla sotto matrice \((j,h)\) e indici interni \((i,g)\). Nota che i quattro indici sono scritti in memoria (assumendo una rappresentazione column-major della matrice) in modo che gli indici così scritti vadano da quello che scorre più velocemente \(i\) a quello che varia più lentamente \(h\). La tua interpretazione mi sembra insomma corretta..

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.