Source code for monalisa.optim._y_norm

"""Port of src/linSpace/bmY_norm.m."""

import numpy as np

from monalisa._mat import isempty, mixed, msize, ndims
from monalisa.optim._y_ve_reshape import y_ve_reshape


[docs] def y_norm(y, d_n, collapse_flag=None): """Norm of each channel of ``y`` weighted by the volume elements ``d_n``; with ``collapse_flag`` the norm over all channels.""" if isempty(collapse_flag): collapse_flag = False y = np.asarray(y) if ndims(y) > 2: raise ValueError("This function is for 2Dim arrays only. ") d_n = y_ve_reshape(d_n, msize(y)) yd = mixed(np.multiply, y, d_n) axis = 0 if msize(y, 1) > msize(y, 2) else 1 n = np.sqrt(np.abs(np.sum(np.conj(y) * yd, axis=axis, keepdims=True))) if collapse_flag: n = np.sqrt(np.sum(np.ravel(n, order="F") ** 2)) return n