[Numpy-discussion] numpythonically getting elements with the minimum sum
Lluís
xscript@gmx....
Tue Jan 29 07:53:29 CST 2013
Gregor Thalhammer writes:
> Am 28.1.2013 um 23:15 schrieb Lluís:
>> Hi,
>>
>> I have a somewhat convoluted N-dimensional array that contains information of a
>> set of experiments.
>>
>> The last dimension has as many entries as iterations in the experiment (an
>> iterative application), and the penultimate dimension has as many entries as
>> times I have run that experiment; the rest of dimensions describe the features
>> of the experiment:
>>
>> data.shape == (... indefinite amount of dimensions ..., NUM_RUNS, NUM_ITERATIONS)
>>
>> So, what I want is to get the data for the best run of each experiment:
>>
>> best.shape == (... indefinite amount of dimensions ..., NUM_ITERATIONS)
>>
>> by selecting, for each experiment, the run with the lowest total time (sum of
>> the time of all iterations for that experiment).
>>
>>
>> So far I've got the trivial part, but not the final indexing into "data":
>>
>> dsum = data.sum(axis = -1)
>> dmin = dsum.min(axis = -1)
>> best = data[???]
>>
>>
>> I'm sure there must be some numpythonic and generic way to get what I want, but
>> fancy indexing is beating me here :)
> Did you have a look at the argmin function? It delivers the indices of the minimum values along an axis. Untested guess:
> dmin_idx = argmin(dsum, axis = -1)
> best = data[..., dmin_idx, :]
Ah, sorry, my example is incorrect. I was actually using 'argmin', but indexing
with it does not exactly work as I expected:
>>> d1.shape
(2, 5, 10)
>>> dsum = d1.sum(axis = -1)
>>> dmin = d1.argmin(axis = -1)
>>> dmin.shape
(2,)
>>> d1_best = d1[...,dmin,:]
>>> d1_best.shape
(2, 2, 10)
Assuming 1st dimension is the test, 2nd the run and 10th the iterations, using
this previous code with some example values:
>>> dmin
[4 3]
>>> d1_best
[[[ ... contents of d1[0,4,:] ...]
[ ... contents of d1[0,3,:] ...]]
[[ ... contents of d1[1,4,:] ...]
[ ... contents of d1[1,3,:] ...]]]
While I actually want this:
[[ ... contents of d1[0,4,:] ...]
[ ... contents of d1[1,3,:] ...]]
Thanks,
Lluis
--
"And it's much the same thing with knowledge, for whenever you learn
something new, the whole world becomes that much richer."
-- The Princess of Pure Reason, as told by Norton Juster in The Phantom
Tollbooth
More information about the NumPy-Discussion
mailing list