Ottenere una sequenza di numeri da un istogramma.

serbring
Ciao a tutti,
mi è sorto un "idea" nata da un'esigenza ingeristica. Spero che la domanda non sia troppo sciocca per voi matematici. Prendiamo una sequenza del tipo:
t=[1 2 3 4 5 6 7];
x=[1 0 2 3 2 0 1];

dove t è il tempo e x è il valore di una grandezza misurata. Essendo la time history parecchio lunga e difficilmente memorizzabile la si memorizza come istogramma e quindi si otterrebbe una cosa del genere, dove c'è il numero assunto (xi) ed il numero di volte in cui quel valore è stato assunto (n), quindi:

xi n
0 2
1 2
2 2
3 1

Avere la sequenza potrebbe essere molto utile, stavo ingegnandomi per trovare un metodo che mi consentirebbe di ricostruire la sequenza dell'istogramma. Per far questo pensavo che si sarebbe potuto salvare una chiave durante la lettura del segnale che salvata insieme all'istogramma consentirebbe di ricavare la sequenza. In altre parole dovrei trovare una f(t,x) e una g(c,xi,n) tale per cui c=f(x,t) (dove c è la chiave) e [t x]=g(c,xi,n)

Stavo pensando di creare una cosa del tipo:
c=t*x=1*1+2*0+3*2+4*3+5*2+6*0+7*1=36.

Tuttavia in tal modo non ottengo la sequenza originaria in quanto esistono diverse combinazioni di sequenze di 7 numeri tale per cui il t*x=36, ad esempio 1*0+2*0+3*3+4*3+5*0+6*3+7*0.

Avete qualche suggerimento da darmi?

grazie

Risposte
PZf
Se non hai particolari vincoli a cui la $x(t)$ deve soddisfare, allora qualunque tentativo sarà vano.
Anche se riesci a creare una chiave funzionante puoi stare tranquillo che la quantità totale di byte occupati da istogramma+chiave non sarà inferiore rispetto a quelli che occuperesti memorizzando la sequenza per intero.
A questo punto eviti di complicarti la vita e memorizzi direttamente la sequenza.

Puoi provare a costruire qualche "chiave" che ti permetta di recuperare informazioni parziali sulla sequenza, ma sicuramente non l'intera sequenza.
Quali siano queste informazioni parziali dipende solo dalle tue esigenze.

serbring
Mi potresti fare un esempio di questo tipo di vincoli? Una cosa che non ho specificato è: che è valori sono tutti positivi, interi e limitati da 0 a 6.

Ad esempio come potrei fare a creare una chiave che mi consenta di recuperare delle informazioni parziali sulla sequenza?

Comunque grazie della risposta

gugo82
[OT, ortografico]

Si scrive un istogramma (senza apostrofo), giacché "istogramma" è un sostantivo maschile e non c'è elisione nell'articolo indeterminativo.

[/OT]

serbring
"gugo82":
[OT, ortografico]

Si scrive un istogramma (senza apostrofo), giacché "istogramma" è un sostantivo maschile e non c'è elisione nell'articolo indeterminativo.

[/OT]


grazie della segnalazione

serbring
nessun altro consiglio da darmi?

Umby2
"serbring":

Stavo pensando di creare una cosa del tipo:
c=t*x=1*1+2*0+3*2+4*3+5*2+6*0+7*1=36.



se la variabile tempo è progressiva, è inutile memorizzarla nella chiave.
è importante sapere la variabile x, quali valori puo' assumere,
nel caso in cui assume solo i valori 0,1,2,3 potresti fondere 4 valori in un solo byte (in questo modo avresti un sistema lost-less)

serbring
"Umby":
[quote="serbring"]
Stavo pensando di creare una cosa del tipo:
c=t*x=1*1+2*0+3*2+4*3+5*2+6*0+7*1=36.



se la variabile tempo è progressiva, è inutile memorizzarla nella chiave.
è importante sapere la variabile x, quali valori puo' assumere,
nel caso in cui assume solo i valori 0,1,2,3 potresti fondere 4 valori in un solo byte (in questo modo avresti un sistema lost-less)[/quote]

Però conta anche l'ordine della sequenza e per questo che secondo me deve includere il valore tempo. In che modo potrei fondere i 4 valori in un solo byte?

PZf
I 4 dati possono assumere solo i valori 0,1,2,3, quindi se usi una variabile di un byte puoi usare i primi due bit per il valore del primo dato, la seconda coppia di bit per il secondo dato, ...

Voglio precisare che quando parlavo di memorizzare l'intera sequenza intendevo di memorizzarla per intero ma senza sprechi di bit.
Nel caso dell'esempio che ti è stato presentato questo metodo di memorizzare i 4 dati (o meglio, tutti i dati a gruppi di 4) è ciò che intendevo per memorizzare l'intera sequenza.
Puoi inventare qualsiasi chiave tu voglia, ma per garantire la possibilità di risalire all'intera sequenza non riuscirai mai a scendere sotto questo limite di spazio di memorizzazione.

serbring
"PZf":
I 4 dati possono assumere solo i valori 0,1,2,3, quindi se usi una variabile di un byte puoi usare i primi due bit per il valore del primo dato, la seconda coppia di bit per il secondo dato, ...

Voglio precisare che quando parlavo di memorizzare l'intera sequenza intendevo di memorizzarla per intero ma senza sprechi di bit.
Nel caso dell'esempio che ti è stato presentato questo metodo di memorizzare i 4 dati (o meglio, tutti i dati a gruppi di 4) è ciò che intendevo per memorizzare l'intera sequenza.
Puoi inventare qualsiasi chiave tu voglia, ma per garantire la possibilità di risalire all'intera sequenza non riuscirai mai a scendere sotto questo limite di spazio di memorizzazione.

non è possibile memorizzare tutta la sequenza perchè è un segnale campionato a 100Hz che arriva a durare 10 anni.

serbring
nessuno ha altri consigli da darmi?

Umby2
con il sistema 4 valori in un byte, ti servono 8GB circa per memorizzare 10 anni di dati, non mi sembra impossibile.
In fondo si tratta di un DVD. ;-)

serbring
"Umby":
con il sistema 4 valori in un byte, ti servono 8GB circa per memorizzare 10 anni di dati, non mi sembra impossibile.
In fondo si tratta di un DVD. ;-)


sembra solo un DVD, ma non è così semplice, il problema è che devo implementare questa sorta di "chiave" in un dispositivo a basso costo che è già in commercio con una sua memoria interna (1MB), quindi non è possibile aggiungere altra memoria perchè sarebbe un costo aggiuntivo, sarebbe da cambiare troppe cose.

PZf
Ti ripeto, non potrai trovare nessuna "chiave", di dimensioni ragionevoli, che ti consenta di recuperare l'intera sequenza.
Se invece ti basta poter recuperare solo delle informazioni parziali allora è possibile che si trovi qualche idea che fa al caso tuo.
Quali possano essere queste informazioni parziali dipende solo dalle tue esigenze (cosa ci devi fare con questi dati dopo averli memorizzati?).

"serbring":
Una cosa che non ho specificato è: che è valori sono tutti positivi, interi e limitati da 0 a 6.

"serbring":
non è possibile memorizzare tutta la sequenza perchè è un segnale campionato a 100Hz che arriva a durare 10 anni.


Provo a dire qualcosa di più preciso, in termini matematici.
Ogni dato può assumere 7 valori diversi, e, nel giro di 10 anni, vengono registrati 31 557 600 000 dati. Quindi esistono $7^31557600000$ sequenze distinte che la tua chiave dovrebbe essere in grado di recuperare. Ne segue che la chiave più piccola possibile occuperebbe circa 10 GB.

serbring
ok grazie dell'informazione...dovrò fare a meno di questa cosa e cercare di risolvere il problema in maniera differente :(

PZf
Puoi provare a scrivere qui cosa esattamente ci faresti con questi dati dopo averli memorizzati tutti.
Magari a qualcuno viene in mente qualche metodo che ti permetta di salvare in uno spazio ridotto solo le informazioni strettamente necessarie al tuo scopo.

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