# How to normalize a vector in MATLAB efficiently? Any related built-in function?

###### Posted By: Anonymous

I normalize a vector V in MATLAB as following:

```
normalized_V = V/norm(V);
```

however, is it the most elegant (efficient) way to normalize a vector in MATLAB?

## Solution

The original code you suggest is the best way.

Matlab is extremely good at vectorized operations such as this, at least for large vectors.

The built-in norm function is very fast. Here are some timing results:

```
V = rand(10000000,1);
% Run once
tic; V1=V/norm(V); toc % result: 0.228273s
tic; V2=V/sqrt(sum(V.*V)); toc % result: 0.325161s
tic; V1=V/norm(V); toc % result: 0.218892s
```

V1 is calculated a second time here just to make sure there are no important cache penalties on the first call.

Timing information here was produced with R2008a x64 on Windows.

**EDIT:**

Revised answer based on gnovice’s suggestions (see comments). Matrix math (barely) wins:

```
clc; clear all;
V = rand(1024*1024*32,1);
N = 10;
tic; for i=1:N, V1 = V/norm(V); end; toc % 6.3 s
tic; for i=1:N, V2 = V/sqrt(sum(V.*V)); end; toc % 9.3 s
tic; for i=1:N, V3 = V/sqrt(V'*V); end; toc % 6.2 s ***
tic; for i=1:N, V4 = V/sqrt(sum(V.^2)); end; toc % 9.2 s
tic; for i=1:N, V1=V/norm(V); end; toc % 6.4 s
```

IMHO, the difference between “norm(V)” and “sqrt(V’*V)” is small enough that for most programs, it’s best to go with the one that’s more clear. To me, “norm(V)” is clearer and easier to read, but “sqrt(V’*V)” is still idiomatic in Matlab.

###### Answered By: Anonymous

Disclaimer: This content is shared under creative common license cc-by-sa 3.0. It is generated from StackExchange Website Network.