Nicht wirklich sicher, was Sie damit erreichen wollen, indem Sie die Daten auf beliebige Zahlen runden.
import numpy as np
def cookdata(data):
#Assuming your data is sorted as per example array in your question
data = np.asarray(data)
i = 0
startidx = 0
while np.unique(data).size > np.ceil((data.max()-data.min())/0.1):
lastidx = startidx + np.where(data[startidx:] < np.unique(data)[0]+0.1*(i+1))[0].size
data[startidx:lastidx] = np.unique(data)[i]
startidx = lastidx
i += 1
return data
: Sie können entweder round
Funktion midpoint oder mit ceil
ing/floor
Funktion nach Multiplikation des Array mit 10
Was Sie versuchen jedoch zu erreichen, kann so getan werden, um zu prüfen, Dies gibt ein Dataset zurück, wie in Ihrer Frage gefragt. Ich bin sicher, es gibt bessere Möglichkeiten, es zu tun:
data = np.sort(np.random.uniform(0.12, 0.5, 10))
data
array([ 0.12959374, 0.14192312, 0.21706382, 0.27638412, 0.27745105,
0.28516701, 0.37941334, 0.4037809 , 0.41016534, 0.48978927])
cookdata(data)
array([ 0.12959374, 0.12959374, 0.12959374, 0.27638412, 0.27638412,
0.27638412, 0.37941334, 0.37941334, 0.37941334, 0.48978927])
Die Funktion gibt Array basierend auf ersten Wert zurück.
Sie können jedoch auch einfachere Operationen in Betracht ziehen, bei denen keine Rundungswerte für beliebige Datenpunkte erforderlich sind. Betrachten Sie np.round(data, decimals=1)
. In Ihrem Fall könnten Sie auch floor
Funktion verwenden, wie in: np.floor(data/0.1)*0.1
oder wenn Sie den Anfangswert behalten möchten:
data = np.asarray(data)
datamin = data.min()
data = np.floor((data-datamin)/0.1)*0.1+datamin
data
array([ 0.12959374, 0.12959374, 0.12959374, 0.22959374, 0.22959374,
0.22959374, 0.32959374, 0.32959374, 0.32959374, 0.42959374])
Hier werden die Daten als ein Vielfaches von ersten Wert, anstatt beliebigen Wert zwischen den Vielfachen von ersten Wert .
Wenn sich die Werte auf 0,23 ändern, werden die Werte dahinter mit 0,23 und nicht mit 0,12 verglichen und dann mit 0,32 ..... – user7544575