Come mappare i valori di un intervallo in altro intervallo?

ReSiaK
Ciao ragazzi, scusate ma il caldo mi ha fuso il cervello e non ne riesco a venire fuori...

Ho due generici numeri X e Y dove X<0 e Y>0 rigorosamente. Nell'intervallo [X, Y] sono compresi N valori reali.
X è diverso da Y quindi l'intervallo è asimmetrico rispetto a 0.

Devo rimappare questi valori nell'intervallo [0, 255] ed inoltre gli N valori rimappati non devono essere dei semplici reali bensì degli interi.

Un enorme grazie a chi riesce a darmi qualche dritta. :P

Risposte
Dorian1
Nell'intervallo [X, Y] sono compresi N valori reali


Direi che sono un pò più di $N$... Forse intendevi $N$ interi... o $N$ naturali...

pic2
O forse "siano dati N reali...."

Comunque il problema ha poco senso. Puoi sempre "mapparli" tutti in 0 no?

Ah comunque si da il caso che la condizione X<0:?

ReSiaK
no scusate forse mi sono spiegato male, non devo prendere tutti i reali compresi tra X e Y ma un numero fissato e assegnato di reali che ho chiamato N quindi come dice pic "siano dati N reali compresi tra due reali assegnati X e Y..."

pic intendevo X e Y diversi anche in valore assoluto ;)
comunque, cosa intendi con mapparli tutti in 0?

pic2
A sto punto cosa intendi tu per "mapparli"? Io intendo semplicemente applicare una mappa, o meglio una funzione ..

Fioravante Patrone1
"pic":
O forse "siano dati N reali...."

Comunque il problema ha poco senso. Puoi sempre "mapparli" tutti in 0 no?

Ah comunque si da il caso che la condizione X<0:?

Essere bravi non autorizza a prendere in giro gli altri.
E non è la prima volta. Ti invito quindi a partecipare a questo forum con lo spirito giusto.

Se non vuoi, il forum per i "pierini del dottore" sai bene qual è.

pic2
Sperando che il diretto interessato non si sia sentito preso in giro, proverò a cambiare.

Fioravante Patrone1
"ReSiaK":
Ciao ragazzi, scusate ma il caldo mi ha fuso il cervello e non ne riesco a venire fuori...

Ho due generici numeri X e Y dove X<0 e Y>0 rigorosamente. Nell'intervallo [X, Y] sono compresi N valori reali.
X è diverso da Y quindi l'intervallo è asimmetrico rispetto a 0.

Devo rimappare questi valori nell'intervallo [0, 255] ed inoltre gli N valori rimappati non devono essere dei semplici reali bensì degli interi.

Dipende molto da come ti sono assegnati i numeri, dalle condizioni cui deve soddisfare la mappa (ad esempio, a valori distinti devono corrispondere interi distinti? Nel qual caso sarà opportuno che gli N valori che ti sono assegnati non siano più di 256).

Se ti è lecito, e se ha senso, potresti applicare un algoritmo di sorting ai numeri dati. Poi li sbatti su [0,255] semplicemente attribuendo a ciascuno l'indice che l'algoritmo di sorting gli ha assegnato (magari diminuito di uno, se l'indicizzazione parte da 1).

ReSiaK
mi rendo conto che formulare il problema a parole non è facile, d'altronde cercate di capire che questo quesito nasce dalla risoluzione di un problema più grande.
provate a vederlo come un problema di quantizzazione applicato a un segnale già campionato.

faccio un esempio numerico. fate conto che ho una black box che in uscita mi da:

X=-15.1980
Y=12.4578

e 10^6 valori reali del tipo (-13.4290, 6.9125, -9.9110, 0.1223, .......) compresi tra X e Y.

A questo punto devo rappresentarli su 8 bit (quindi interi da 0 a 255). Naturalmente a più valori distinti corrisponderà lo stesso intero.

Non posso fare algoritmi di ordinamento perchè devo conservare l'ordine dei valori così come prodotto dalla black box.

Non so se adesso è più chiaro o vi ho confuso ulteriormente le idee.

Comunque ringrazio chi mi ha risposto finora, apprezzo chi spreca parte del suo tempo per aiutare gli altri.

Fioravante Patrone1
"ReSiaK":

faccio un esempio numerico. fate conto che ho una black box che in uscita mi da:

X=-15.1980
Y=12.4578

e 10^6 valori reali del tipo (-13.4290, 6.9125, -9.9110, 0.1223, .......) compresi tra X e Y.

A questo punto devo rappresentarli su 8 bit (quindi interi da 0 a 255). Naturalmente a più valori distinti corrisponderà lo stesso intero.

Un'idea sarebbe quella di dividere l'intervallo in 256 parti (intervallini) uguali e assegnare a ognuno degli intervallini un numero da 0 a 255.
Dopodiché i numeri che cadono dentro ciascuno degli intervallini li mandi nell'intero appropriato.

Ad esempio (caso semplice, da 0 a 3 e solo 7 numeri da X=-5 a Y=12:).
Y-X = 17
divido l'intervallo in 4 parti di lunghezza 17/4.
I numeri che cadono in [-5, -5 + 17/4[ li mando in 0
Quelli in [-5 + 17/4, -5 + 34/4[ li mando in 1
Quelli in [-5 + 34/4, -5 + 51/4[ li mando in 0
Quelli in [-5 + 51/4, 12] li mando in 0

Se corrisponde a quello che ti serve, a questo punto basta scrivere la formula generale

"ReSiaK":

Non posso fare algoritmi di ordinamento perchè devo conservare l'ordine dei valori così come prodotto dalla black box.

Non credo sia un'idea da buttare, comunque. Se necessario la riprenderò.

ReSiaK
Mi sembra una buona soluzione. Grazie mille per l'aiuto

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.