Mar-09-2019, 01:28 PM
I´m trying to convert the following R code to python but theres something wrong with my code results are not the same can you take a look at it? Thank you.
With this input vector or list:
wtr = c(1,1,10,12,11,1) or wtr = [1,1,10,12,11,1]
R code:
# Finds the local peaks in a vector. Checks the optionally supplied threshold
# for minimum height.
With this input vector or list:
wtr = c(1,1,10,12,11,1) or wtr = [1,1,10,12,11,1]
Output:The correct ouput should be 4 in R and 3 in python. The output is an index of a value therefore there´s a difference in the output obtained with each code.R code:
# Finds the local peaks in a vector. Checks the optionally supplied threshold
# for minimum height.
findPeaks <- function(dataIn, thresh=0){
varL = length(dataIn);
locs = rep(FALSE, varL);
peaks= rep(NaN, varL);
for(i in 2:varL-1){
pkI = which.max(dataIn[(i-1):(i+1)])
posPeak = max(dataIn[(i-1):(i+1)]);
if(pkI == 2) {
peaks[i] = posPeak;
locs[i] = TRUE;
}
}
inds = 1:varL;
locs = inds[locs];
peaks= peaks[locs];
# remove all below threshold value
useI = peaks > thresh;
locs = locs[useI];
return(locs)
}python code:def findPeaks(dataIn, thresh=0.0):
varL = len(dataIn)
locs = [False]*varL
peaks = [None]*varL
for i in range(1,varL):
pKi = np.argmax(dataIn[(i-1):(i+1)])
posPeak = np.max(dataIn[(i-1):(i+1)])
if(pKi == 1):
peaks[i] = posPeak
locs[i] = True
locs = [i for i, e in enumerate(locs) if e == True]
peaks = [dataIn[i] for i in locs]
# remove all below threshold value
useI = [a for a in peaks if a > thresh]
locs = [i for i in range(varL) if dataIn[i] in useI]
return locs
