mirror of
https://github.com/metabarcoding/obitools4.git
synced 2026-04-30 12:00:39 +00:00
8c7017a99d
- Update obioptions.Version from "Release 4.4.29" to "/v/ Release v5" - Update version.txt from 4.29 → .30 (automated by Makefile)
29 lines
1.5 KiB
Markdown
29 lines
1.5 KiB
Markdown
# `obidist` Package: Efficient Symmetric Distance/Similarity Matrix Management
|
||
|
||
The `*DistMatrix` type provides a memory-efficient, symmetric matrix implementation for distance or similarity data.
|
||
|
||
- **Storage Strategy**: Only the upper triangle (i < j) is stored, reducing memory usage from *O(n²)* to *n(n−1)/2*.
|
||
- **Diagonal Handling**: Diagonal entries are fixed (0.0 for distances, 1.0 for similarities); assignments to diagonal indices are silently ignored.
|
||
- **Symmetry Guarantee**: `Get(i, j)` and `Set(i, j, v)` automatically handle both (i,j) and (j,i), ensuring consistency.
|
||
|
||
## Constructors
|
||
|
||
| Function | Description |
|
||
|---------|-------------|
|
||
| `NewDistMatrix(n)` / `WithLabels(labels)` | Creates *n×n* distance matrix (diag = 0). |
|
||
| `NewSimilarityMatrix(n)` / `WithLabels(labels)` | Creates *n×n* similarity matrix (diag = 1). |
|
||
|
||
## Core Operations
|
||
|
||
- `Get(i, j)` / `Set(i, j, v)`: Access/update symmetric entries.
|
||
- `Size() int`, `GetLabel(i)` / `SetLabel(i, label)`: Query/mutate element labels.
|
||
- `Labels() []string`, `GetRow(i)` / `GetColumn(j)`: Retrieve full rows/columns (as copies).
|
||
|
||
## Analysis Helpers
|
||
|
||
- `MinDistance()`, `MaxDistance()` → `(value, i, j)` of the extremal off-diagonal entry.
|
||
- `Copy() *DistMatrix`: Deep copy for immutability-safe operations.
|
||
- `ToFullMatrix()` → `[][]float64`: Converts to dense representation (use sparingly).
|
||
|
||
Designed for clustering, phylogenetics, or any domain requiring fast symmetric matrix access with minimal footprint.
|