Fast euclidian norm over N.th dimension of a DOUBLE array
Y = DNorm2(X, N)
X: Real DOUBLE array.
N: Dimension to operate on.
Y: Euclidian norm over N.th dimension: Y = sqrt(sum(X .* X, N)).
Length of N.th dimension of Y is 1.
NaN's are considered.
Matlab's built-in function NORM is fast for vectors, but for matrices the matrix norm is replied. Other efficient methods for vectors(!):
Y = sqrt(sum(X .* X));
Y = sqrt(X * X'); % row vectors, faster than DNorm2!
And James Tursa's MTIMESX is very fast for vectors also and can operate on the 1st dimension of arrays also:
X = rand(100, 100); X = reshape(X, 100, 1, 100);
Y = sqrt(mtimesx(X, 't', X));
But for arrays DNorm2 is faster, and I do not see a way to apply MTIMESX for trailing dimensions without time-consuming transpositions.
This function must be compiled before using:
mex -O DNorm2.c
See DNorm2.c for detailed instructions.
TEST: Run uTest_DNorm2 to test validity and speed.
NOTES: See DNorm2.c for strategies to optimize processing speed depending on the size of X.
Unfortunately this function is not multi-threaded. Assistence to include OMP would be very welcome.
Tested: Matlab 6.5, 7.7, 7.8, WinXP, 32bit
Compiler: LCC2.4/3.8, BCC5.5, OWC1.8, MSVC2008
Assumed Compatibility: higher Matlab versions, Mac, Linux, 64bit
Jan (2020). DNorm2 (https://www.mathworks.com/matlabcentral/fileexchange/29035-dnorm2), MATLAB Central File Exchange. Retrieved .
Bugfix: Error check failed for DNorm2(X, 0) on 64 bit systems. Thanks Bruno!