Source code for toqito.matrix_ops.calculate_vector_matrix_dimension
"""Calculates the (common) dimension of a set of vectors or matrices."""
import numpy as np
[docs]
def calculate_vector_matrix_dimension(item: np.ndarray) -> int:
r"""Calculate the dimension of a vector or a square matrix, including 2D representations of vectors.
This function determines the dimension of the provided item, treating 1D arrays as vectors,
2D arrays with one dimension being 1 as vector representations, and square 2D arrays as density matrices.
The dimension is the length for vectors and the square of the side length for density matrices.
Example:
Consider the following three-dimensional vector:
\[
v = \left[ 1, 0, 0 \right]^{\text{T}}.
\]
For this case, the dimension of the vector is equal to its length
```python exec="1" source="above"
import numpy as np
from toqito.matrix_ops import calculate_vector_matrix_dimension
v = np.array([1, 0, 0])
print(calculate_vector_matrix_dimension(v))
```
For the density matrix of some two-dimensional quantum system
\[
\rho = \frac{1}{2}
\begin{pmatrix}
1 & 0 \\
0 & 1
\end{pmatrix}
\]
```python exec="1" source="above"
import numpy as np
from toqito.matrix_ops import calculate_vector_matrix_dimension
rho = np.array([[1/2, 0],[0, 1/2]])
print(calculate_vector_matrix_dimension(rho))
```
Returns:
The dimension of the item. For vectors (1D or 2D representations), it's the length. For square matrices, it's
the square of the size of one side.
Raises:
ValueError: If the input is not a numpy array, not a 1D array (vector), a 2D array representing a vector, or a
square 2D
array (density matrix).
Args:
item: The item whose dimension is being calculated. Can be a 1D array (vector), a 2D array representing a vector
with one dimension being 1, or a square 2D array (density matrix).
Returns:
The dimension of the vector or matrix.
"""
# Check if the input is a numpy array
if not isinstance(item, np.ndarray):
raise ValueError("Input must be a numpy array.")
if item.ndim == 1:
return item.size
if item.ndim == 2:
if item.shape[0] == 1 or item.shape[1] == 1:
return max(item.shape)
if item.shape[0] == item.shape[1]:
return item.shape[0]
raise ValueError("Input must be either a vector or a square matrix.")
raise ValueError("Input must be either a vector or a square matrix.")