# Calculating minima values for each column of given data

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.

• Why do you need that particular output shape? May 15, 2014 at 15:54

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))

• thanks. what about reshaping and transposing? is there ways to improve performance?
– alps
May 15, 2014 at 7:33
• thanks again. by the way, splitting and stacking are also same in terms of performance?
– alps
May 15, 2014 at 8:26
• @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. May 15, 2014 at 9:53
• Where does the 2 come from? May 15, 2014 at 15:56
• @alps See my comment to Winston above. May 16, 2014 at 6:04