diff --git a/fsl/utils/transform.py b/fsl/utils/transform.py index 6932b6303fa943ec965cb502e715b9e4e0e53e43..4fe7fe8e4cfd33e97c4e4cd72db90081c5ce8582 100644 --- a/fsl/utils/transform.py +++ b/fsl/utils/transform.py @@ -55,13 +55,26 @@ def concat(*xforms): def veclength(vec): - """Returns the length of the given vector. """ - return np.sqrt(np.dot(vec, vec)) + """Returns the length of the given vector(s). + + Multiple vectors may be passed in, with a shape of ``(n, 3)``. + """ + vec = np.array(vec, copy=False).reshape(-1, 3) + return np.sqrt(np.einsum('ij,ij->i', vec, vec)) def normalise(vec): - """Normalises the given vector to unit length. """ - return vec / veclength(vec) + """Normalises the given vector(s) to unit length. + + Multiple vectors may be passed in, with a shape of ``(n, 3)``. + """ + vec = np.array(vec, copy=False).reshape(-1, 3) + n = (vec.T / veclength(vec)).T + + if n.size == 3: + n = n[0] + + return n def scaleOffsetXform(scales, offsets):