4
\$\begingroup\$

Can anyone help make this perform faster?

import numpy as np
from scipy import signal

d0 = np.random.random_integers(10, 12, (5,5))
d1 = np.random.random_integers(1, 3, (5,5))
d2 = np.random.random_integers(4, 6, (5,5))
d3 = np.random.random_integers(7, 9, (5,5))
d4 = np.random.random_integers(1, 3, (5,5))
d5 = np.random.random_integers(13, 15, (5,5))

data = np.array([d0,d1,d2,d3,d4,d5])  ####THIS SHAPE IS GIVEN, WHICH CAN NOT BE CHANGED.
data = data.reshape(6,25)

data = data.T
minimas=[]
for x in data:
    minima = signal.argrelmin(x, axis=0)
    minimas.append(x[minima])

print minimas    ####THIS SHAPE IS GIVEN, WHICH CAN NOT BE CHANGED.
\$\endgroup\$
  • \$\begingroup\$ Why do you need that particular output shape? \$\endgroup\$ – Winston Ewert May 15 '14 at 15:54
2
\$\begingroup\$

Note: this only works if there are exactly two minima in each row.

You can avoid the loop by computing minima along axis 1 of the data array.

minima = signal.argrelmin(data, axis=1)
minimas = list(data[minima].reshape(-1,2))
|improve this answer|||||
\$\endgroup\$
  • \$\begingroup\$ thanks. what about reshaping and transposing? is there ways to improve performance? \$\endgroup\$ – alps May 15 '14 at 7:33
  • \$\begingroup\$ thanks again. by the way, splitting and stacking are also same in terms of performance? \$\endgroup\$ – alps May 15 '14 at 8:26
  • 1
    \$\begingroup\$ @alps Actually, reshape docs state that sometimes it does copy the array, for example when reshaping after transposing. I'm not sure about splitting and stacking; I presume stacking involves copying at least in the general case. \$\endgroup\$ – Janne Karila May 15 '14 at 9:53
  • \$\begingroup\$ Where does the 2 come from? \$\endgroup\$ – Winston Ewert May 15 '14 at 15:56
  • 1
    \$\begingroup\$ @alps See my comment to Winston above. \$\endgroup\$ – Janne Karila May 16 '14 at 6:04

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.