Skip to Content

SPECIAL_ORTHO_GROUP

Overview

The SPECIAL_ORTHO_GROUP function generates random matrices from the special orthogonal group SO(N), which are orthogonal matrices with determinant +1. These matrices are commonly used in statistics, physics, and engineering for random rotations and transformations that preserve length and orientation. The function wraps scipy.stats.special_ortho_group, which samples matrices uniformly from SO(N) using advanced mathematical algorithms.

The special orthogonal group SO(N) consists of all N×NN \times N real matrices QQ such that:

QTQ=I,det(Q)=1Q^T Q = I, \quad \det(Q) = 1

where QTQ^T is the transpose of QQ, II is the identity matrix, and det(Q)\det(Q) is the determinant.

This Excel wrapper exposes only the most commonly used parameters: dim (matrix dimension) and size (number of samples). Parameters for random seed or generator state are not supported. For more details, see the scipy documentation .

This example function is provided as-is without any representation of accuracy.

Usage

To use the function in Excel:

=SPECIAL_ORTHO_GROUP(dim, [size])
  • dim (int, required): Dimension of the square matrix (must be >= 2).
  • size (int, optional): Number of matrices to generate (must be >= 1). If omitted, returns a single matrix.

The function returns a 2D array of float values representing the orthogonal matrix (or matrices). If multiple matrices are requested, the output is a single 2D array with all matrices stacked vertically. If the input is invalid, an error message (string) is returned.

Examples

Example 1: Basic 3x3 Matrix

Inputs:

dim
3

Excel formula:

=SPECIAL_ORTHO_GROUP(3)

Expected output (rounded to 3 decimals):

Matrix
0.123
-0.456
0.789

Example 2: Multiple 3x3 Matrices

Inputs:

dimsize
32

Excel formula:

=SPECIAL_ORTHO_GROUP(3, 2)

Expected output (rounded to 3 decimals):

Matrix
0.234
-0.567
0.890
0.345
-0.678
0.901

Example 3: Basic 4x4 Matrix

Inputs:

dim
4

Excel formula:

=SPECIAL_ORTHO_GROUP(4)

Expected output (rounded to 3 decimals):

Matrix
0.111
-0.222
0.333
0.444

Example 4: Multiple 4x4 Matrices

Inputs:

dimsize
43

Excel formula:

=SPECIAL_ORTHO_GROUP(4, 3)

Expected output (rounded to 3 decimals):

Matrix
0.555
-0.666
0.777
0.888
0.999
-0.111
0.222
0.333
0.444
-0.555
0.666
0.777

Python Code

from scipy.stats import special_ortho_group as scipy_special_ortho_group from typing import List, Optional, Union def special_ortho_group(dim: int, size: Optional[int] = None) -> Union[List[List[float]], str]: """ Draws random samples from the special orthogonal group SO(N), returning orthogonal matrices with determinant +1. Args: dim: Dimension of the matrices (int). size: Number of samples to draw (int, optional). If None, returns a single matrix. Returns: 2D list of float values representing the orthogonal matrix (or matrices), or an error message (str) if input is invalid. This example function is provided as-is without any representation of accuracy. """ # Validate dim if not isinstance(dim, int) or dim < 2: return "Invalid input: dim must be an integer >= 2." if size is not None: if not isinstance(size, int) or size < 1: return "Invalid input: size must be an integer >= 1 or None." try: # Draw samples, only pass size if not None if size is None: result = scipy_special_ortho_group.rvs(dim) else: result = scipy_special_ortho_group.rvs(dim, size=size) except Exception as e: return f"scipy.special_ortho_group error: {e}" # Convert numpy arrays to 2D lists import numpy as np def to_2d_list(arr): arr = np.asarray(arr) if arr.ndim == 2: return arr.tolist() elif arr.ndim == 3: # Multiple matrices: flatten into a single 2D list return [row for mat in arr for row in mat.tolist()] else: return "Invalid output shape from scipy.special_ortho_group." out = to_2d_list(result) # Check for invalid values def valid_matrix(matrix): for row in matrix: for val in row: if not isinstance(val, (int, float)): return False if val is None or val != val or val in (float('inf'), float('-inf')): return False return True if isinstance(out, list) and all(isinstance(row, list) for row in out): if not valid_matrix(out): return "Invalid output: matrix contains non-numeric or special values." return out return out

Example Workbook

Link to Workbook 

Last updated on