In [1]:
import numpy as np

In [2]:
def euclidean_vectorized(a):
    """ Calculate vectorized Euclidean distance."""
    r = a.shape[0]
    aa = np.sum(a*a, axis=1)
    dm = (aa[:, np.newaxis] + aa) - 2*np.dot(a, a.T)
    idx = np.rot90(np.tril(np.ones((r, r), dtype='bool'), -1), 2)
    euclideanDistance = np.sqrt(np.abs(dm[idx]))
    return euclideanDistance

In [3]:
m1 = np.random.rand(5000, 1000)

In [4]:
%load_ext memprof

In [5]:
%memprof -f 'euclidean_vectorized(m1)' -p 2


Line #    Mem usage    Increment   Line Contents
================================================
     1    77.64 MiB     0.00 MiB   def euclidean_vectorized(a):
     2                                 """ Calculate vectorized Euclidean distance."""
     3    77.64 MiB     0.00 MiB       r = a.shape[0]
     4    77.78 MiB     0.14 MiB       aa = np.sum(a*a, axis=1)
     5   291.46 MiB   213.68 MiB       dm = (aa[:, np.newaxis] + aa) - 2*np.dot(a, a.T)
     6   315.22 MiB    23.76 MiB       idx = np.rot90(np.tril(np.ones((r, r), dtype='bool'), -1), 2)
     7   410.59 MiB    95.37 MiB       euclideanDistance = np.sqrt(np.abs(dm[idx]))
     8   410.59 MiB     0.00 MiB       return euclideanDistance



In [6]:
%load_ext watermark

In [7]:
%watermark -a "Milos Miljkovic" -d -v -m


Milos Miljkovic 22/07/2014 

CPython 3.4.1
IPython 2.1.0

compiler   : GCC 4.1.2 20080704 (Red Hat 4.1.2-54)
system     : Debian GNU/Linux 7.6 (wheezy)
release    : 3.2.0-4-amd64
machine    : x86_64
processor  : Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz
CPU cores  : 8
interpreter: 64bit