fluxopt.constraints.sparse
¶
Sparse summation helpers for linopy expressions.
Avoids dense broadcast when coefficient arrays are highly sparse (e.g., conversion constraints where each converter only touches 2-3 flows out of hundreds).
Functions:
| Name | Description |
|---|---|
sparse_weighted_sum |
Compute |
sparse_weighted_sum
¶
sparse_weighted_sum(
var: Variable, coeffs: DataArray, sum_dim: str, group_dim: str
) -> LinearExpression
Compute (var * coeffs).sum(sum_dim) using only non-zero pairs.
When coeffs is sparse along (group_dim, sum_dim) — e.g. a
(converter, flow) matrix where each converter references only a few
flows — the naive dense broadcast creates a huge intermediate linopy
expression. This function finds the non-zero (group, sum_dim) pairs
and uses groupby().sum() to aggregate, avoiding the dense broadcast.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
|
Variable
|
linopy Variable or LinearExpression with sum_dim. |
required |
|
DataArray
|
DataArray with at least |
required |
|
str
|
Dimension to sum over (e.g. |
required |
|
str
|
Dimension to group by (e.g. |
required |
Returns:
| Type | Description |
|---|---|
LinearExpression
|
linopy expression with sum_dim removed, group_dim present. |