changeset 730:a850a4f92735 dev

added performance script comparing lcss using cdist with default
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Tue, 11 Aug 2015 10:52:04 -0400
parents dad99b86a104
children b02431a8234c
files samples/performances.txt scripts/performance-db.py scripts/performance-db.sh scripts/performance-lcss.py scripts/performance.py scripts/performance.sh
diffstat 6 files changed, 173 insertions(+), 155 deletions(-) [+]
line wrap: on
line diff
--- a/samples/performances.txt	Mon Aug 10 17:52:19 2015 -0400
+++ b/samples/performances.txt	Tue Aug 11 10:52:04 2015 -0400
@@ -1,3 +1,9 @@
+python -m timeit 'from utils import LCSS; from numpy.random import random_sample; lcss = LCSS(metric = "cityblock", epsilon = 0.1); lcss.compute(random_sample((1000,2)), random_sample((2000, 2)))'
+10 loops, best of 3: 1.6 sec per loop
+
+python -m timeit 'from utils import LCSS; from numpy.random import random_sample; lcss = LCSS(similarityFunc = lambda x,y: (abs(x[0]-y[0]) <= 0.1) and (abs(x[1]-y[1]) <= 0.1)); lcss.compute(random_sample((1000,2)), random_sample((2000, 2)))' 
+10 loops, best of 3: 3.48 sec per loop
+########
 Performance report using ../../Data/norway/2_video/20130606-0830.sqlite
 ####
 test query positions
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/performance-db.py	Tue Aug 11 10:52:04 2015 -0400
@@ -0,0 +1,72 @@
+#! /usr/bin/env python
+
+import sys, shutil, os, sqlite3, timeit#, argparse
+
+import storage
+
+if len(sys.argv) >= 2:
+    dbFilename = sys.argv[1]
+else:
+    dbFilename="./samples/laurier.sqlite"
+
+print("Performance report using {}".format(dbFilename))
+shutil.copy(dbFilename, dbFilename+'.test')
+dbFilename=dbFilename+'.test'
+connection = sqlite3.connect(dbFilename)
+
+nFeatures=storage.getNumberRowsTable(connection, "positions", "trajectory_id")
+print dbFilename, nFeatures
+
+####
+# test query tmp trajectory instant table
+####
+def selectTrajectoryIdInstant(connection, lastInstant):
+    cursor = connection.cursor()
+    for i in xrange(lastInstant):
+	cursor.execute("select trajectory_id from trajectory_instants where last_instant = {}".format(lastInstant))
+        cursor.fetchall()
+
+def test2Setup(connection):
+    cursor = connection.cursor()
+    cursor.execute("CREATE TEMP TABLE IF NOT EXISTS trajectory_instants AS select trajectory_id, min(frame_number) as first_instant, max(frame_number) as last_instant, max(frame_number)-min(frame_number)+1 as length from positions group by trajectory_id")
+    return storage.getMinMax(connection, "trajectory_instants", "last_instant", "max")
+
+# lastInstant = test2Setup(connection)
+# print timeit.timeit("selectTrajectoryIdInstant(connection, lastInstant)", setup="from __main__ import selectTrajectoryIdInstant, connection, lastInstant", number = 100)
+# storage.createIndex(connection, "trajectory_instants", "last_instant")
+# print timeit.timeit("selectTrajectoryIdInstant(connection, lastInstant)", setup="from __main__ import selectTrajectoryIdInstant, connection, lastInstant", number = 100)
+# storage.createIndex(connection, "trajectory_instants", "trajectory_id", True)
+# print timeit.timeit("selectTrajectoryIdInstant(connection, lastInstant)", setup="from __main__ import selectTrajectoryIdInstant, connection, lastInstant", number = 100)
+
+
+####
+# test query positions/velocities in feature grouping
+####
+def selectTrajectories(connection, nFeatures):
+    cursor = connection.cursor()
+    for i in xrange(nFeatures):
+	cursor.execute("select * from positions where trajectory_id = {} order by frame_number".format(i))
+        cursor.fetchall()
+
+def dropIndices(connection):
+    cursor = connection.cursor()
+    cursor.execute("drop index if exists positions_trajectory_id_index")
+    #sqlite3 $dbFilename "drop index if exists frame_number_index"
+    #sqlite3 $dbFilename "drop index if exists tid_frame_index"
+    #sqlite3 $dbFilename "drop index if exists of_trajectory_id_index"
+    connection.commit()
+
+def test1Positions():
+    print('''####
+    test query positions
+    ####''')
+    print("no index")
+    dropIndices(connection)
+    print timeit.timeit("selectTrajectories(connection, nFeatures)", setup="from __main__ import selectTrajectories, connection, nFeatures", number = 100)
+    ####
+    print("with index on trajectory_id")
+    storage.createIndex(connection, "positions", "trajectory_id")#sqlite3 $dbFilename "create index trajectory_id_index on positions(trajectory_id)"
+    print timeit.timeit("selectTrajectories(connection, nFeatures)", setup="from __main__ import selectTrajectories, connection, nFeatures", number = 100)
+
+#### Cleanup
+os.remove(dbFilename)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/performance-db.sh	Tue Aug 11 10:52:04 2015 -0400
@@ -0,0 +1,83 @@
+#!/bin/bash
+if [ $# -ge 1 ];
+then
+    dbFilename=$1
+else
+    dbFilename="./samples/laurier.sqlite"
+fi
+echo "Performance report using "$dbFilename
+cp $dbFilename $dbFilename.test
+dbFilename=$dbFilename.test
+nFeatures=`sqlite3 $dbFilename "select count(distinct trajectory_id) from positions"`
+
+####
+# test query positions/velocities in feature grouping
+####
+echo "####"
+echo "test query positions"
+echo "####"
+
+selectTrajectories() {
+    for (( i=1; i<=$nFeatures; i++ ))
+    do
+	sqlite3 $dbFilename "select * from positions where trajectory_id = ${i} order by frame_number" > /dev/null
+    done
+}
+
+dropIndices() {
+    sqlite3 $dbFilename "drop index if exists trajectory_id_index"
+    sqlite3 $dbFilename "drop index if exists frame_number_index"
+    sqlite3 $dbFilename "drop index if exists tid_frame_index"
+    sqlite3 $dbFilename "drop index if exists of_trajectory_id_index"
+}
+
+echo "no index"
+dropIndices
+time selectTrajectories
+####
+echo "with index on trajectory_id"
+sqlite3 $dbFilename "create index trajectory_id_index on positions(trajectory_id)"
+time selectTrajectories
+####
+echo "with index on trajectory_id and frame_number"
+sqlite3 $dbFilename "create index frame_number_index on positions(frame_number)"
+time selectTrajectories
+####
+echo "with index on the 2 columns trajectory_id"
+dropIndices
+sqlite3 $dbFilename "create index tid_frame_index on positions(trajectory_id,frame_number)"
+time selectTrajectories
+####
+echo "query all feature positions, order by id and frame_number (index/no index)"
+time (sqlite3 $dbFilename "select * from positions order by trajectory_id, frame_number" > /dev/null)
+dropIndices
+time (sqlite3 $dbFilename "select * from positions order by trajectory_id, frame_number" > /dev/null)
+# no effect: probably because already ordered
+
+####
+# test query positions/velocities in feature grouping
+####
+echo "####"
+echo "test query object positions"
+echo "####"
+
+selectObjectTrajectories() {
+    sqlite3 $dbFilename "SELECT OF.object_id, P.frame_number, avg(P.x_coordinate), avg(P.y_coordinate) from positions P, objects_features OF where P.trajectory_id = OF.trajectory_id group by OF.object_id, P.frame_number ORDER BY OF.object_id, P.frame_number" > /dev/null
+}
+echo "no index"
+dropIndices
+time selectObjectTrajectories
+####
+echo "index on trajectory_id"
+sqlite3 $dbFilename "create index trajectory_id_index on positions(trajectory_id)"
+time selectObjectTrajectories
+####
+echo "index on trajectory_id in positions and objects_features"
+sqlite3 $dbFilename "create index of_trajectory_id_index on objects_features(trajectory_id)"
+time selectObjectTrajectories
+
+
+###
+echo "Cleaning up!"
+#dropIndices
+rm $dbFilename
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/performance-lcss.py	Tue Aug 11 10:52:04 2015 -0400
@@ -0,0 +1,12 @@
+#! /usr/bin/env python
+
+import timeit
+
+vectorLength = 10
+number = 10
+
+print('Default Python implementation with lambda')
+print timeit.timeit('lcss.compute(random_sample(({},2)), random_sample(({}, 2)))'.format(vectorLength, vectorLength*2), setup = 'from utils import LCSS; from numpy.random import random_sample; lcss = LCSS(similarityFunc = lambda x,y: (abs(x[0]-y[0]) <= 0.1) and (abs(x[1]-y[1]) <= 0.1));', number = number)
+
+print('Using scipy distance.cdist')
+print timeit.timeit('lcss.compute(random_sample(({},2)), random_sample(({}, 2)))'.format(vectorLength, vectorLength*2), setup = 'from utils import LCSS; from numpy.random import random_sample; lcss = LCSS(metric = "cityblock", epsilon = 0.1);', number = number)
--- a/scripts/performance.py	Mon Aug 10 17:52:19 2015 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-#! /usr/bin/env python
-
-import sys, shutil, os, sqlite3, timeit#, argparse
-
-import storage
-
-if len(sys.argv) >= 2:
-    dbFilename = sys.argv[1]
-else:
-    dbFilename="./samples/laurier.sqlite"
-
-print("Performance report using {}".format(dbFilename))
-shutil.copy(dbFilename, dbFilename+'.test')
-dbFilename=dbFilename+'.test'
-connection = sqlite3.connect(dbFilename)
-
-nFeatures=storage.getNumberRowsTable(connection, "positions", "trajectory_id")
-print dbFilename, nFeatures
-
-####
-# test query tmp trajectory instant table
-####
-def selectTrajectoryIdInstant(connection, lastInstant):
-    cursor = connection.cursor()
-    for i in xrange(lastInstant):
-	cursor.execute("select trajectory_id from trajectory_instants where last_instant = {}".format(lastInstant))
-        cursor.fetchall()
-
-def test2Setup(connection):
-    cursor = connection.cursor()
-    cursor.execute("CREATE TEMP TABLE IF NOT EXISTS trajectory_instants AS select trajectory_id, min(frame_number) as first_instant, max(frame_number) as last_instant, max(frame_number)-min(frame_number)+1 as length from positions group by trajectory_id")
-    return storage.getMinMax(connection, "trajectory_instants", "last_instant", "max")
-
-# lastInstant = test2Setup(connection)
-# print timeit.timeit("selectTrajectoryIdInstant(connection, lastInstant)", setup="from __main__ import selectTrajectoryIdInstant, connection, lastInstant", number = 100)
-# storage.createIndex(connection, "trajectory_instants", "last_instant")
-# print timeit.timeit("selectTrajectoryIdInstant(connection, lastInstant)", setup="from __main__ import selectTrajectoryIdInstant, connection, lastInstant", number = 100)
-# storage.createIndex(connection, "trajectory_instants", "trajectory_id", True)
-# print timeit.timeit("selectTrajectoryIdInstant(connection, lastInstant)", setup="from __main__ import selectTrajectoryIdInstant, connection, lastInstant", number = 100)
-
-
-####
-# test query positions/velocities in feature grouping
-####
-def selectTrajectories(connection, nFeatures):
-    cursor = connection.cursor()
-    for i in xrange(nFeatures):
-	cursor.execute("select * from positions where trajectory_id = {} order by frame_number".format(i))
-        cursor.fetchall()
-
-def dropIndices(connection):
-    cursor = connection.cursor()
-    cursor.execute("drop index if exists positions_trajectory_id_index")
-    #sqlite3 $dbFilename "drop index if exists frame_number_index"
-    #sqlite3 $dbFilename "drop index if exists tid_frame_index"
-    #sqlite3 $dbFilename "drop index if exists of_trajectory_id_index"
-    connection.commit()
-
-def test1Positions():
-    print('''####
-    test query positions
-    ####''')
-    print("no index")
-    dropIndices(connection)
-    print timeit.timeit("selectTrajectories(connection, nFeatures)", setup="from __main__ import selectTrajectories, connection, nFeatures", number = 100)
-    ####
-    print("with index on trajectory_id")
-    storage.createIndex(connection, "positions", "trajectory_id")#sqlite3 $dbFilename "create index trajectory_id_index on positions(trajectory_id)"
-    print timeit.timeit("selectTrajectories(connection, nFeatures)", setup="from __main__ import selectTrajectories, connection, nFeatures", number = 100)
-
-#### Cleanup
-os.remove(dbFilename)
--- a/scripts/performance.sh	Mon Aug 10 17:52:19 2015 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-#!/bin/bash
-if [ $# -ge 1 ];
-then
-    dbFilename=$1
-else
-    dbFilename="./samples/laurier.sqlite"
-fi
-echo "Performance report using "$dbFilename
-cp $dbFilename $dbFilename.test
-dbFilename=$dbFilename.test
-nFeatures=`sqlite3 $dbFilename "select count(distinct trajectory_id) from positions"`
-
-####
-# test query positions/velocities in feature grouping
-####
-echo "####"
-echo "test query positions"
-echo "####"
-
-selectTrajectories() {
-    for (( i=1; i<=$nFeatures; i++ ))
-    do
-	sqlite3 $dbFilename "select * from positions where trajectory_id = ${i} order by frame_number" > /dev/null
-    done
-}
-
-dropIndices() {
-    sqlite3 $dbFilename "drop index if exists trajectory_id_index"
-    sqlite3 $dbFilename "drop index if exists frame_number_index"
-    sqlite3 $dbFilename "drop index if exists tid_frame_index"
-    sqlite3 $dbFilename "drop index if exists of_trajectory_id_index"
-}
-
-echo "no index"
-dropIndices
-time selectTrajectories
-####
-echo "with index on trajectory_id"
-sqlite3 $dbFilename "create index trajectory_id_index on positions(trajectory_id)"
-time selectTrajectories
-####
-echo "with index on trajectory_id and frame_number"
-sqlite3 $dbFilename "create index frame_number_index on positions(frame_number)"
-time selectTrajectories
-####
-echo "with index on the 2 columns trajectory_id"
-dropIndices
-sqlite3 $dbFilename "create index tid_frame_index on positions(trajectory_id,frame_number)"
-time selectTrajectories
-####
-echo "query all feature positions, order by id and frame_number (index/no index)"
-time (sqlite3 $dbFilename "select * from positions order by trajectory_id, frame_number" > /dev/null)
-dropIndices
-time (sqlite3 $dbFilename "select * from positions order by trajectory_id, frame_number" > /dev/null)
-# no effect: probably because already ordered
-
-####
-# test query positions/velocities in feature grouping
-####
-echo "####"
-echo "test query object positions"
-echo "####"
-
-selectObjectTrajectories() {
-    sqlite3 $dbFilename "SELECT OF.object_id, P.frame_number, avg(P.x_coordinate), avg(P.y_coordinate) from positions P, objects_features OF where P.trajectory_id = OF.trajectory_id group by OF.object_id, P.frame_number ORDER BY OF.object_id, P.frame_number" > /dev/null
-}
-echo "no index"
-dropIndices
-time selectObjectTrajectories
-####
-echo "index on trajectory_id"
-sqlite3 $dbFilename "create index trajectory_id_index on positions(trajectory_id)"
-time selectObjectTrajectories
-####
-echo "index on trajectory_id in positions and objects_features"
-sqlite3 $dbFilename "create index of_trajectory_id_index on objects_features(trajectory_id)"
-time selectObjectTrajectories
-
-
-###
-echo "Cleaning up!"
-#dropIndices
-rm $dbFilename