8000 benchmark more functions · suddrey-qut/spatialmath-python@6135229 · GitHub
[go: up one dir, main page]

Skip to content

Commit 6135229

Browse files
committed
benchmark more functions
1 parent e6ea17a commit 6135229

File tree

1 file changed

+166
-120
lines changed

1 file changed

+166
-120
lines changed

spatialmath/timing.py

Lines changed: 166 additions & 120 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import timeit
1111
from ansitable import ANSITable, Column
1212

13-
N = 1000
13+
N = 100000
1414

1515
table = ANSITable(
1616
Column("Operation", headalign="^"),
@@ -23,167 +23,213 @@ def result(op, t):
2323
table.row(op, t/N*1e6)
2424
# ------------------------------------------------------------------------- #
2525

26-
transforms_setup = '''
27-
from spatialmath import SE3
28-
from spatialmath import base
26+
# transforms_setup = '''
27+
# from spatialmath import SE3
28+
# from spatialmath import base
2929

30-
import numpy as np
31-
from collections import namedtuple
32-
Rt = namedtuple('Rt', 'R t')
33-
X1 = SE3.Rand()
34-
X2 = SE3.Rand()
35-
T1 = X1.A
36-
T2 = X2.A
37-
R1 = base.t2r(T1)
38-
R2 = base.t2r(T2)
39-
t1 = base.transl(T1)
40-
t2 = base.transl(T2)
41-
Rt1 = Rt(R1, t1)
42-
Rt2 = Rt(R2, t2)
43-
v = np.r_[1,2,3]
44-
v2 = np.r_[1,2,3, 1]
45-
'''
46-
t = timeit.timeit(stmt='base.getvector(0.2)', setup=transforms_setup, number=N)
47-
result("getvector(x)", t)
30+
# import numpy as np
31+
# from collections import namedtuple
32+
# Rt = namedtuple('Rt', 'R t')
33+
# X1 = SE3.Rand()
34+
# X2 = SE3.Rand()
35+
# T1 = X1.A
36+
# T2 = X2.A
37+
# R1 = base.t2r(T1)
38+
# R2 = base.t2r(T2)
39+
# t1 = base.transl(T1)
40+
# t2 = base.transl(T2)
41+
# Rt1 = Rt(R1, t1)
42+
# Rt2 = Rt(R2, t2)
43+
# v = np.r_[1,2,3]
44+
# v2 = np.r_[1,2,3, 1]
45+
# '''
46+
# t = timeit.timeit(stmt='base.getvector(0.2)', setup=transforms_setup, number=N)
47+
# result("getvector(x)", t)
4848

49-
t = timeit.timeit(stmt='base.rotx(0.2, unit="rad")', setup=transforms_setup, number=N)
50-
result("base.rotx", t)
49+
# t = timeit.timeit(stmt='base.rotx(0.2, unit="rad")', setup=transforms_setup, number=N)
50+
# result("base.rotx", t)
5151

52-
t = timeit.timeit(stmt='base.trotx(0.2, unit="rad")', setup=transforms_setup, number=N)
53-
result("base.trotx", t)
52+
# t = timeit.timeit(stmt='base.trotx(0.2, unit="rad")', setup=transforms_setup, number=N)
53+
# result("base.trotx", t)
5454

55-
t = timeit.timeit(stmt='base.t2r(T1)', setup=transforms_setup, number=N)
56-
result("base.t2r", t)
55+
# t = timeit.timeit(stmt='base.t2r(T1)', setup=transforms_setup, number=N)
56+
# result("base.t2r", t)
5757

58-
t = timeit.timeit(stmt='base.r2t(R1)', setup=transforms_setup, number=N)
59-
result("base.r2t", t)
58+
# t = timeit.timeit(stmt='base.r2t(R1)', setup=transforms_setup, number=N)
59+
# result("base.r2t", t)
6060

61-
t = timeit.timeit(stmt='T1 @ T2', setup=transforms_setup, number=N)
62-
result("4x4 @", t)
61+
# t = timeit.timeit(stmt='T1 @ T2', setup=transforms_setup, number=N)
62+
# result("4x4 @", t)
6363

64-
t = timeit.timeit(stmt='T1[:3,:3] @ T2[:3,:3] + T1[:3,:3] @ T2[:3,3]', setup=transforms_setup, number=N)
65-
result("R1*R2, R1*t", t)
64+
# t = timeit.timeit(stmt='T1[:3,:3] @ T2[:3,:3] + T1[:3,:3] @ T2[:3,3]', setup=transforms_setup, number=N)
65+
# result("R1*R2, R1*t", t)
6666

67-
t = timeit.timeit(stmt='(Rt1.R @ Rt2.R, Rt1.R @ Rt2.t)', setup=transforms_setup, number=N)
68-
result("T1 * T2 (R, t)", t)
67+
# t = timeit.timeit(stmt='(Rt1.R @ Rt2.R, Rt1.R @ Rt2.t)', setup=transforms_setup, number=N)
68+
# result("T1 * T2 (R, t)", t)
6969

70-
t = timeit.timeit(stmt='base.trinv(T1)', setup=transforms_setup, number=N)
71-
result("base.trinv", t)
70+
# t = timeit.timeit(stmt='base.trinv(T1)', setup=transforms_setup, number=N)
71+
# result("base.trinv", t)
7272

73-
t = timeit.timeit(stmt='(Rt1.R.T, -Rt1.R.T @ Rt1.t)', setup=transforms_setup, number=N)
74-
result("base.trinv (R,t)", t)
73+
# t = timeit.timeit(stmt='(Rt1.R.T, -Rt1.R.T @ Rt1.t)', setup=transforms_setup, number=N)
74+
# result("base.trinv (R,t)", t)
7575

76-
t = timeit.timeit(stmt='np.linalg 10000 .inv(T1)', setup=transforms_setup, number=N)
77-
result("np.linalg.inv", t)
76+
# t = timeit.timeit(stmt='np.linalg.inv(T1)', setup=transforms_setup, number=N)
77+
# result("np.linalg.inv", t)
7878

79-
t = timeit.timeit(stmt='T1 @ v2', setup=transforms_setup, number=N)
80-
result("(4,4) * (4,)", t)
79+
# t = timeit.timeit(stmt='T1 @ v2', setup=transforms_setup, number=N)
80+
# result("(4,4) * (4,)", t)
8181

82-
# ------------------------------------------------------------------------- #
83-
table.rule()
82+
# # ------------------------------------------------------------------------- #
83+
# table.rule()
8484

85-
t = timeit.timeit(stmt='SE3()', setup=transforms_setup, number=N)
86-
result("SE3()", t)
85+
# t = timeit.timeit(stmt='SE3()', setup=transforms_setup, number=N)
86+
# result("SE3()", t)
8787

88-
t = timeit.timeit(stmt='SE3.Rx(0.2)', setup=transforms_setup, number=N)
89-
result("SE3.Rx()", t)
88+
# t = timeit.timeit(stmt='SE3.Rx(0.2)', setup=transforms_setup, number=N)
89+
# result("SE3.Rx()", t)
9090

91-
t = timeit.timeit(stmt='T1[:3,:3]', setup=transforms_setup, number=N)
92-
result("T1[:3,:3]", t)
91+
# t = timeit.timeit(stmt='T1[:3,:3]', setup=transforms_setup, number=N)
92+
# result("T1[:3,:3]", t)
9393

94-
t = timeit.timeit(stmt='X1.A', setup=transforms_setup, number=N)
95-
result("SE3.A", t)
94+
# t = timeit.timeit(stmt='X1.A', setup=transforms_setup, number=N)
95+
# result("SE3.A", t)
9696

97-
t = timeit.timeit(stmt='SE3(T1)', setup=transforms_setup, number=N)
98-
result("SE3(T1)", t)
97+
# t = timeit.timeit(stmt='SE3(T1)', setup=transforms_setup, number=N)
98+
# result("SE3(T1)", t)
9999

100-
t = timeit.timeit(stmt='SE3(T1, check=False)', setup=transforms_setup, number=N)
101-
result("SE3(T1 check=False)", t)
100+
# t = timeit.timeit(stmt='SE3(T1, check=False)', setup=transforms_setup, number=N)
101+
# result("SE3(T1 check=False)", t)
102102

103-
t = timeit.timeit(stmt='SE3([T1], check=False)', setup=transforms_setup, number=N)
104-
result("SE3([T1])", t)
103+
# t = timeit.timeit(stmt='SE3([T1], check=False)', setup=transforms_setup, number=N)
104+
# result("SE3([T1])", t)
105105

106-
t = timeit.timeit(stmt='X1 * X2', setup=transforms_setup, number=N)
107-
result("SE3 * SE3", t)
106+
# t = timeit.timeit(stmt='X1 * X2', setup=transforms_setup, number=N)
107+
# result("SE3 * SE3", t)
108108

109-
t = timeit.timeit(stmt='X1.inv()', setup=transforms_setup, number=N)
110-
result("SE3.inv", t)
109+
# t = timeit.timeit(stmt='X1.inv()', setup=transforms_setup, number=N)
110+
# result("SE3.inv", t)
111111

112-
t = timeit.timeit(stmt='X1 * v', setup=transforms_setup, number=N)
113-
result("SE3 * v", t)
112+
# t = timeit.timeit(stmt='X1 * v', setup=transforms_setup, number=N)
113+
# result("SE3 * v", t)
114114

115-
t = timeit.timeit(stmt='a = X1.log()', setup=transforms_setup, number=N)
116-
result("SE3.log()", t)
115+
# t = timeit.timeit(stmt='a = X1.log()', setup=transforms_setup, number=N)
116+
# result("SE3.log()", t)
117117

118-
# ------------------------------------------------------------------------- #
119-
quat_setup = '''
120-
from spatialmath import base
121-
from spatialmath import UnitQuaternion
122-
import numpy as np
123-
q1 = base.rand()
124-
q2 = base.rand()
125-
v = np.r_[1,2,3]
126-
Q1 = UnitQuaternion.Rx(0.2)
127-
Q2 = UnitQuaternion.Ry(0.3)
128-
'''
129-
table.rule()
118+
# # ------------------------------------------------------------------------- #
119+
# quat_setup = '''
120+
# from spatialmath import base
121+
# from spatialmath import UnitQuaternion
122+
# import numpy as np
123+
# q1 = base.rand()
124+
# q2 = base.rand()
125+
# v = np.r_[1,2,3]
126+
# Q1 = UnitQuaternion.Rx(0.2)
127+
# Q2 = UnitQuaternion.Ry(0.3)
128+
# '''
129+
# table.rule()
130130

131-
t = timeit.timeit(stmt='a = UnitQuaternion()', setup=quat_setup, number=N)
132-
result("UnitQuaternion() ", t)
131+
# t = timeit.timeit(stmt='a = UnitQuaternion()', setup=quat_setup, number=N)
132+
# result("UnitQuaternion() ", t)
133133

134-
t = timeit.timeit(stmt='a = UnitQuaternion.Rx(0.2)', setup=quat_setup, number=N)
135-
result("UnitQuaternion.Rx ", t)
134+
# t = timeit.timeit(stmt='a = UnitQuaternion.Rx(0.2)', setup=quat_setup, number=N)
135+
# result("UnitQuaternion.Rx ", t)
136136

137-
t = timeit.timeit(stmt='a = Q1 * Q2', setup=quat_setup, number=N)
138-
result("UnitQuaternion * UnitQuaternion", t)
137+
# t = timeit.timeit(stmt='a = Q1 * Q2', setup=quat_setup, number=N)
138+
# result("UnitQuaternion * UnitQuaternion", t)
139139

140-
t = timeit.timeit(stmt='a = Q1 * v', setup=quat_setup, number=N)
141-
result("UnitQuaternion * v", t)
140+
# t = timeit.timeit(stmt='a = Q1 * v', setup=quat_setup, number=N)
141+
# result("UnitQuaternion * v", t)
142142

143-
t = timeit.timeit(stmt='a = base.qqmul(q1,q2)', setup=quat_setup, number=N)
144-
result("base.qqmul", t)
143+
# t = timeit.timeit(stmt='a = base.qqmul(q1,q2)', setup=quat_setup, number=N)
144+
# result("base.qqmul", t)
145145

146-
t = timeit.timeit(stmt='a = base.qvmul(q1,v)', setup=quat_setup, number=N)
147-
result("base.qvmul", t)
146+
# t = timeit.timeit(stmt='a = base.qvmul(q1,v)', setup=quat_setup, number=N)
147+
# result("base.qvmul", t)
148148

149149

150150

151-
# ------------------------------------------------------------------------- #
152-
twist_setup = '''
153-
from spatialmath import SE3, Twist3
154-
from spatialmath import base
155-
import numpy as np
156-
t1 = SE3.Rand().Twist3()
157-
t2 = SE3.Rand().Twist3()
158-
T1 = SE3.Rand()
159-
s = [1,2,3,4,5,6]
160-
v = [1,2,3]
161-
'''
162-
table.rule()
163-
t = timeit.timeit(stmt='a = Twist3()', setup=twist_setup, number=N)
164-
result("Twist3()", t)
151+
# # ------------------------------------------------------------------------- #
152+
# twist_setup = '''
153+
# from spatialmath import SE3, Twist3
154+
# from spatialmath import base
155+
# import numpy as np
156+
# from math import cos
157+
# S1 = SE3.Rand().Twist3()
158+
# S2 = SE3.Rand().Twist3()
159+
# X1 = SE3.Rand()
160+
# T1 = X1.A
161+
# A1 = X1.Ad()
162+
# se3 = S1.se3()
163+
# s = np.r_[1,2,3,4,5,6]
164+
# v = np.r_[1,2,3]
165+
# '''
166+
# table.rule()
167+
# t = timeit.timeit(stmt='a = Twist3()', setup=twist_setup, number=N)
168+
# result("Twist3()", t)
169+
170+
# t = timeit.timeit(stmt='a = X1.Twist3()', setup=twist_setup, number=N)
171+
# result("SE3.Twist3()", t)
165172

166-
t = timeit.timeit(stmt='a = T1.Twist3()', setup=twist_setup, number=N)
167-
result("SE3.Twist3()", t)
173+
# t = timeit.timeit(stmt='a = S1 * S2', setup=twist_setup, number=N)
174+
# result("Twist3 * Twist3", t)
168175

169-
t = timeit.timeit(stmt='a = t1 * t2', setup=twist_setup, number=N)
170-
result("Twist3 * Twist3", t)
176+
# t = timeit.timeit(stmt='a = S1.inv()', setup=twist_setup, number=N)
177+
# result("Twist3.inv()", t)
171178

172-
t = timeit.timeit(stmt='a = t1.inv()', setup=twist_setup, number=N)
173-
result("Twist3.inv()", t)
179+
# t = timeit.timeit(stmt='a = S1.Ad()', setup=twist_setup, number=N)
180+
# result("Twist3.Ad()", t)
174181

175-
t = timeit.timeit(stmt='a = t1.Ad()', setup=twist_setup, number=N)
176-
result("Twist3.Ad()", t)
182+
# t = timeit.timeit(stmt='a = S1.exp(1)', setup=twist_setup, number=N)
183+
# result("Twist3.Exp()", t)
177184

178-
t = timeit.timeit(stmt='a = t1.exp(1)', setup=twist_setup, number=N)
179-
result("Twist3.Exp()", t)
185+
# t = timeit.timeit(stmt='a = base.skewa(v)', setup=twist_setup, number=N)
186+
# result("skew", t)
187+
188+
# t = timeit.timeit(stmt='a = base.skewa(s)', setup=twist_setup, number=N)
189+
# result("skewa", t)
190+
191+
# t = timeit.timeit(stmt='a = base.vexa(se3)', setup=twist_setup, number=N)
192+
# result("vexa", t)
193+
194+
# t = timeit.timeit(stmt='a = base.trlog(T1)', setup=twist_setup, number=N)
195+
# result("trlog", t)
196+
197+
# t = timeit.timeit(stmt='a = base.trlog(T1, twist=True)', setup=twist_setup, number=N)
198+
# result("trlog as twist", t)
199+
200+
# t = timeit.timeit(stmt='a = base.trexp(se3)', setup=twist_setup, number=N)
201+
# result("trexp", t)
202+
203+
# t = timeit.timeit(stmt='a = A1 @ s', setup=twist_setup, number=N)
204+
# result("(6,6) * (6,)", t)
205+
206+
# t = timeit.timeit(stmt='a = base.rodrigues(v)', setup=twist_setup, number=N)
207+
# result("rodrigues", t)
208+
209+
# t = timeit.timeit(stmt='a = cos(0.3)', setup=twist_setup, number=N)
210+
# result("math.cos", t)
211+
212+
# t = timeit.timeit(stmt='a = np.cos(0.3)', setup=twist_setup, number=N)
213+
# result("np.cos", t)
214+
215+
# ------------------------------------------------------------------------- #
216+
misc_setup = '''
217+
from spatialmath import base
218+
import numpy as np
219+
s = np.r_[1,2,3,4,5,6]
220+
'''
221+
table.rule()
180222

181-
t = timeit.timeit(stmt='a = base.skewa(v)', setup=twist_setup, number=N)
182-
result("skew", t)
223+
t = timeit.timeit(stmt='a = np.inner(s,s).sum()', setup=misc_setup, number=N)
224+
result("inner()", t)
183225

184-
t = timeit.timeit(stmt='a = base.skewa(s)', setup=twist_setup, number=N)
185-
result("skewa", t)
226+
t = timeit.timeit(stmt='a = np.linalg.norm(s) ** 2', setup=misc_setup, number=N)
227+
result("norm**2", t)
186228

229+
t = timeit.timeit(stmt='a = (s ** 2).sum()', setup=misc_setup, number=N)
230+
result("s**2.sum()", t)
187231

232+
t = timeit.timeit(stmt='a = np.sum(s ** 2)', setup=misc_setup, number=N)
233+
result("np.sum(s ** 2)", t)
188234

189235
table.print()

0 commit comments

Comments
 (0)
0