|
|
Welches Zahlenformat für geringsnötigen Speicherbedarf |
|
FrenktheCast |

Forum-Anfänger
|
 |
Beiträge: 41
|
 |
|
 |
Anmeldedatum: 23.11.07
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 02.03.2016, 14:53
Titel: Welches Zahlenformat für geringsnötigen Speicherbedarf
|
 |
Hallo,
ich hab ein Array mit 14400 x 14400 Werten. Da die Berechnungen dieser 200 mio Werte sehr aufwendig sind möchte ich diese abspeichern. Aktuell benötigt das Array als .mat 950mb Speicherplatz.
Es sind Zahlen zwischen -180 und 20.000 die Dezimalstellen besitzten. Die Dezimalstellen könnten notfalls weggelassen werden. (Auf eine Nachkommastelle wäre ausrechend exakt)
Welches Format sollten die Zahlen haben um beim speichern als Mat zahl so wenig speicher wie nötig zu benötigen?
Danke euch
|
|
|
|
|
Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 02.03.2016, 15:31
Titel:
|
 |
falls deine matrix dünn besetzt ist könnte sich eine umwandlung in sparse lohnen.
wenn nur eine nachkomma stelle interessant ist könntest du auch mit 10 multiplizieren und int16 benutzen.
das ist jedenfalls das, was mir dazu einfällt.
grüße
_________________
richtig Fragen
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 02.03.2016, 16:57
Titel: Re: Welches Zahlenformat für geringsnötigen Speicherbedarf
|
 |
Hallo FrenktheCast,
Welches MAT-File Format benutzt Du denn? In manchen wird komprimiert, in anderen nicht. In den Preferences kann man das einstellen, oder beim SAVE Befehl.
Mit 10 zu multiplizieren und INT16 zu verwenden reicht nicht, wenn du 20'000 als Wert hast und eine Nachkommastelle verwendest, denn INT16 speichert nur Zahlen bis 65.535. Wenn Du stattdessen INT32 nimmst, benötigt das so viel Platz wie SINGLE. Dann würde ich gleich letzteres bevorzugen.
Gruß, Jan
|
|
|
Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 02.03.2016, 17:06
Titel:
|
 |
Zitat: |
Mit 10 zu multiplizieren und INT16 zu verwenden reicht nicht, wenn du 20'000 als Wert hast und eine Nachkommastelle verwendest, |
das stimmt. ich hatte irgendwie 20 im kopf als ich das geschrieben habe. also -180 bis 20
_________________
richtig Fragen
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 02.03.2016, 17:56
Titel:
|
 |
Lieber Winkow,
Es tut mir sehr leid, dass Du 20 im Kopf hattest. Das muss sich seltsam anfühlen. :-)
Wenn man noch den Offset abzieht könnte man sich das Vorzeichen sparen:
Dies speichert die Daten so genau wie möglich mit 16 Bits pro Wert.
Bitte testen! Ich habe gerade kein Matlab zur Verfügung.
Gruß, Jan
|
|
|
FrenktheCast |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 41
|
 |
|
 |
Anmeldedatum: 23.11.07
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 03.03.2016, 09:12
Titel:
|
 |
Ich hab das jetzt mit int16 ohne Kommastellen gelöst. Danke für die Hinweise!
Hab jetzt 1. Milliarde Werte im Array was dann 1,53 Gb verbraucht. Gespeichert wird "ohne" weitere Preferences. Also müsste eigentlich in '-v7.3'.
Jan S, wenn ich dein Code vollständig durchblicke würde dein Vorschlag einen Mehrwert zur reinen int16 Variante bringen, da hier die erste Dezimalstelle mitgenommen werden kann kann?
Blöde Frage: Bei int16 (u.a.) macht es doch beim Speicherplatz keinen Unterschied welchen numerischen Wert die Zahl besitzt - es sind doch immer 16 bit belegt oder?
Danke euch
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 03.03.2016, 11:42
Titel:
|
 |
Hallo FrenktheCast,
Zitat: |
Jan S, wenn ich dein Code vollständig durchblicke würde dein Vorschlag einen Mehrwert zur reinen int16 Variante bringen, da hier die erste Dezimalstelle mitgenommen werden kann kann? |
Es würde zumindest der mögliche Zahlenraum der 16 Bits optimal genutzt. Falls Du nur Zahlen zwischen -180 und 180 hast, würden entsprechend mehr Nachkommastellen gespeichert werden.
Zitat: |
Blöde Frage: Bei int16 (u.a.) macht es doch beim Speicherplatz keinen Unterschied welchen numerischen Wert die Zahl besitzt - es sind doch immer 16 bit belegt oder? |
Solange die daten nicht komprimiert werden, hast Du recht. Falls sie komprimiert werden, hängt es auch noch davon ab, wie stark die Werte korreliert sind.
Gruß, Jan
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|