DNorm2

Versione 1.1.0.0 (10,4 KB) da Jan
Euclidian norm along a specified dim of an array - fast C-Mex
1K download
Aggiornato 15 ott 2010

Visualizza la licenza

Fast euclidian norm over N.th dimension of a DOUBLE array

Y = DNorm2(X, N)
INPUT:
X: Real DOUBLE array.
N: Dimension to operate on.
OUTPUT:
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.

COMPILATION:
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

Cita come

Jan (2024). DNorm2 (https://www.mathworks.com/matlabcentral/fileexchange/29035-dnorm2), MATLAB Central File Exchange. Recuperato .

Compatibilità della release di MATLAB
Creato con R2009a
Compatibile con qualsiasi release
Compatibilità della piattaforma
Windows macOS Linux
Categorie
Scopri di più su Performance and Memory in Help Center e MATLAB Answers

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!
Versione Pubblicato Note della release
1.1.0.0

Bugfix: Error check failed for DNorm2(X, 0) on 64 bit systems. Thanks Bruno!

1.0.0.0