Source code for toqito.perms.vec
"""Performs the vec operation on a matrix."""
import numpy as np
[docs]
def vec(mat: np.ndarray) -> np.ndarray:
r"""Perform the vec operation on a matrix.
For more info, see Section: The Operator-Vector Correspondence from [@Watrous_2018_TQI].
The function reorders the given matrix into a column vector by stacking the columns of the matrix sequentially.
For instance, for the following matrix:
\[
X =
\begin{pmatrix}
1 & 2 \\
3 & 4
\end{pmatrix}
\]
it holds that
\[
\text{vec}(X) = \begin{pmatrix} 1 & 3 & 2 & 4 \end{pmatrix}^T
\]
More formally, the vec operation is defined by
\[
\text{vec}(E_{a,b}) = e_a \otimes e_b
\]
for all \(a\) and \(b\) where
\[
E_{a,b}(c,d) = \begin{cases}
1 & \text{if} \ (c,d) = (a,b) \\
0 & \text{otherwise}
\end{cases}
\]
for all \(c\) and \(d\) and where
\[
e_a(b) = \begin{cases}
1 & \text{if} \ a = b \\
0 & \text{if} \ a \not= b
\end{cases}
\]
for all \(a\) and \(b\).
Examples:
Consider the following matrix
\[
A = \begin{pmatrix}
1 & 2 \\
3 & 4
\end{pmatrix}
\]
Performing the \(\text{vec}\) operation on \(A\) yields
\[
\text{vec}(A) = \left[1, 3, 2, 4 \right]^{T}.
\]
```python exec="1" source="above"
import numpy as np
from toqito.perms import vec
X = np.array([[1, 2], [3, 4]])
print(vec(X))
```
!!! See Also
[`unvec()`][toqito.matrix_ops.unvec.unvec]
Args:
mat: The input matrix.
Returns:
The vec representation of the matrix.
"""
return mat.reshape((-1, 1), order="F")