Source code for torch_measure.data.transforms
# Copyright (c) 2026 AIMS Foundations. MIT License.
"""Transforms for response matrices."""
from __future__ import annotations
import torch
[docs]
def binarize(data: torch.Tensor, threshold: float = 0.5) -> torch.Tensor:
"""Convert continuous response matrix to binary.
Parameters
----------
data : torch.Tensor
Response matrix with values in [0, 1] (may contain NaN).
threshold : float
Values >= threshold become 1, otherwise 0.
Returns
-------
torch.Tensor
Binary response matrix (NaN preserved).
"""
result = (data >= threshold).float()
result[torch.isnan(data)] = float("nan")
return result
[docs]
def normalize_rows(data: torch.Tensor) -> torch.Tensor:
"""Normalize each row to zero mean and unit variance (ignoring NaN).
Parameters
----------
data : torch.Tensor
Response matrix (may contain NaN).
Returns
-------
torch.Tensor
Row-normalized matrix (NaN preserved).
"""
mask = ~torch.isnan(data)
result = data.clone()
for i in range(data.shape[0]):
row_vals = data[i, mask[i]]
if len(row_vals) > 1:
mean = row_vals.mean()
std = row_vals.std()
if std > 0:
result[i, mask[i]] = (row_vals - mean) / std
return result