Speeding up Vector Comparison
- To: mathgroup at smc.vnet.net
- Subject: [mg61414] Speeding up Vector Comparison
- From: Lee Newman <leenewm at umich.edu>
- Date: Tue, 18 Oct 2005 02:45:16 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Dear Group,
I have a compiled function that compares two vectors by computing the
mean of the absolute value of the difference between the two vectors --
subject to the constraint that if both sub-elements of the vector are
less then a threshold value, they do not contribute to the difference
(see example below). The function gets executed about 100million times
over the course of a simulation. I've optimized it as much as I can,
but it is still a bottleneck (~7 hrs). Can anyone see an obvious way to
rewrite my function (below) so that it runs faster?
Example (the actual vectors I am using have length=100):
v1 = {0.9, 0.9, 0.1, 0.1};
v2 = {0.5, 0.1, 0.5, 0.1};
threshold=0.5
for these two vectors, I want to compute the mean of the absolute value
of the difference between the two vectors, ignoring the last position
because the last value in *both* vectors is < threshold.
My Function
MeanDiff = Compile[{{vector1, _Real,1}, {vector2, _Real, 1}, {threshold,
_Real}},
Mean@ Abs[Plus @@@ Select[Transpose[{vector1, -vector2}], Max[Abs
/@ #] > threshold &]]
, {{Mean[_], _Real}}];
Note: I use Plus rather than Subtract because Mathematica doesn't allow
Subtract with @@@ in compiled functions. The third argument to Compile
seems to be necessary, as without it Mathematica complains that the function
doesn't return a tensor of size 1.
Thanks for any suggestions,
Lee Newman
- Follow-Ups:
- Re: Speeding up Vector Comparison
- From: Pratik Desai <pdesai1@umbc.edu>
- Re: Speeding up Vector Comparison