WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Einzelne Nullen aus Matrix löschen.

 

Amper
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 27.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2010, 09:28     Titel: Einzelne Nullen aus Matrix löschen.
  Antworten mit Zitat      
Morgen Zusammen,

ich weis jetzt ziemlich genau wie ich ganze Zeilen oder Spalten mit Nullen löschen kann da das hier mehr als ausreichend genau beschriebein ist ich hab aber leider ein etwas andere Problem.

Ich hab eine Matrix mit 140000*100 Elementen. Ich will jetzt die Nullen Löschen und den Rest der Matrix "nachrutschen" lassen.
Soll dann so aussehen:

A:
0 1 5 4 2 0
9 9 0 0 8 4
5 4 6 5 0 4
0 0 2 3 4 8

Ergebnis
A:
1 5 4 2 9 9
8 4 5 4 6 5
4 2 3 4 8 0

von mir aus kann das Ergebnis auch ein Fektor sein ich hab nur festgestellt das dann der Rechner etwas langsam wird wenn ich alle meine Daten als Fektor vorliegen habe..

Kann mir da jemand zu helfen?

Dann hab ich bei der gelegen heit noch eine Frage. Gibt es eine Forme oder Gröse die man bei Matrizen nicht überschreiten sollte? Ich habe festgestellt das ab einer bestimmten Gröse von Matrix mein rechner extrem langsam wird. Also doppelte daten menge in etwa 10fache rechen zeit. Woran kann das liegen?

Vielen Danke schon mal
Private Nachricht senden Benutzer-Profile anzeigen


Napoleon
Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 22.07.10
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 13.08.2010, 11:37     Titel:
  Antworten mit Zitat      
Hi,

wenn du zb eine 3x3 matrix hast und da ist nur eine null, dann geht danach nix mehr mit nachrutschen.so vlt?
Code:

a=[0 1 2;3 4 5];
a(a==0)=[];
 


VG
_________________

Die Hartnäckigen gewinnen die Schlachten.
Private Nachricht senden Benutzer-Profile anzeigen
 
yankemen
Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 14.04.10
Wohnort: ---
Version: 32: 2008a & 2010a
     Beitrag Verfasst am: 13.08.2010, 12:16     Titel:
  Antworten mit Zitat      
Moin,

anschließend kannst Du mit
Code:
das wieder in die geeignete Form bringen. Allerdings musst Du sicherstellen, dass a aus 3*6 Elementen besteht, sonst meckert Matlab.

Die Größe der Matrizen liegt in Abhängigkeit vom System bei z.B. bei Xp mit 3GB RAM mit 2008a bei ca. 10 Mio Einträgen in double, das wäre eine 3000*3000-Matrix (~500MB). Langsam wird der Rechner auch, wenn er viele Variablen handhaben muss. Also Nicht benötigte Sachen wieder freigeben. Oder von double auf single oder gar integer umsteigen. Etc., gibt viele Parameter, die die Sache beeinflussen.

HTH,
yankemen
_________________

Code:
% Kommentare brauchen ein Leerzeichen nach dem %
Gibt es ein Ist und ein Wunsch-Soll? Gibt es Beispiele zum Durchprobieren? Wenn selbstgeschriebene Funktionen aufgerufen werden: können sie bitte angehangen werden? Gab es Fehlermeldungen?
Stimmen die Werte, wenn der Debugger mit Haltepunkten etc. eingesetzt wird?
Danke Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
aj.geissler
Forum-Guru

Forum-Guru



Beiträge: 251
Anmeldedatum: 26.11.07
Wohnort: Seeheim-Jugenheim
Version: ---
     Beitrag Verfasst am: 13.08.2010, 12:43     Titel:
  Antworten mit Zitat      
Hi,

nette Übung. Habe mal versucht, die Aufgabenstellung in einer kleinen Funktion abzubilden.

Code:

function b=del0matrix(a);
[za,sa]=size(a);
Na=za*sa;
a=a.';
avek=a(:);
avek=avek(avek~=0);
La=length(avek);
 newrowcount=ceil(La/sa);
additionalzeros=(newrowcount*sa)-La;
avek=[avek;zeros(additionalzeros,1)];
b=reshape(avek,sa,newrowcount).';
 


Als kleines Beispiel:
Code:

a=floor(5 .*rand(13,7));
b=del0matrix(a);
disp(a);
disp(b);
 


Jetzt müssten die Zahlen wunschgemäß nachrücken.

Sicherlich kannst Du hier und da noch einige Operationen optimieren, damit sich dein Rechner wegen Speicherproblemen nicht beschwert. Wink

Grüße
Andreas
_________________

Andreas Geißler
Private Nachricht senden Benutzer-Profile anzeigen
 
Amper
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 27.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2010, 13:40     Titel:
  Antworten mit Zitat      
Hey danke,

ich hatte da ihrgend was mit einer for schleife gebastelt aber das dann nach einer hableben Stunde laufzeit abgebrochen.

Adreas deine Funktion hat gerade mal 30sec gebraucht und so weit ich das sehen kann ist alles genau so wie ich das gerne hätte.

Also vielen dank noch mal

Amper
Private Nachricht senden Benutzer-Profile anzeigen
 
Napoleon
Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 22.07.10
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 13.08.2010, 13:41     Titel:
  Antworten mit Zitat      
Zitat:

Ergebnis
A:
1 5 4 2 9 9
8 4 5 4 6 5
4 2 3 4 8 0


ahh jetzt verstehe ich was die letzte 0 zu bedeuten hat.(additional zero)
ganz nett gelöst Wink

VG
_________________

Die Hartnäckigen gewinnen die Schlachten.
Private Nachricht senden Benutzer-Profile anzeigen
 
Amper
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 27.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.09.2010, 08:34     Titel:
  Antworten mit Zitat      
Morgen Leute, morgen Andreas

ich habe deine "kleine Funktion" gut gebrauchen können. Lief auch alles super bis ich auf einmal immer volgende Fehlermeldung bekommen habe. Das merkwürdige daran ist, dass ich die Fehlermeldung auch bekomme wenn ich mit einer alten Matrix arbeite bei der fohr ein paar tagen noch alles ohne porbleme Lief.
Vieleicht weis ja einer von euch was ich falsch gemacht habe. Ich hab auch mal den Memory nachgesehen meiner meinung nach sollte da noch jede menge platz sein. Aber wer weis vielicht interpretier ich das ganze auch einfach falsch und ich brauch noch was ram.

Feherlermeldung
Code:

??? Error using ==> transpose
Out of memory. Type HELP MEMORY for your options.

Error in ==> del0matrix at 12
b=reshape(avek,sa,newrowcount).';  
 


die ausgabe von memory sieht vor dem laden der Matrix so aus:
Code:

Maximum possible array:             210 MB (2.206e+008 bytes) *
Memory available for all arrays:    868 MB (9.101e+008 bytes) **
Memory used by MATLAB:              387 MB (4.054e+008 bytes)
Physical Memory (RAM):             1900 MB (1.992e+009 bytes)
 


und nach dem laden der matriy so:
Maximum possible array: 210 MB (2.206e+008 bytes) *
Memory available for all arrays: 781 MB (8.185e+008 bytes) **
Memory used by MATLAB: 489 MB (5.133e+008 bytes)
Physical Memory (RAM): 1900 MB (1.992e+009 bytes)
Code:


Heist für mich wenn ich etwa 100MB weniger speicher zur verfügung habe ist meine Matrix etwa 100MB gross. Sollte als beim erstellen eine gleich grosen Matrix noch reichlich platz sein, oder?

vielen dank schon mal für die Antworten

amper



edit by denny: Bitte bei BBCode in deinem Profile Häckchen löschen, damit die Code-Umgebung richtig dargestellt wird
Private Nachricht senden Benutzer-Profile anzeigen
 
Amper
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 27.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.09.2010, 16:37     Titel:
  Antworten mit Zitat      
Ich hab zwar immer noch keine Ahung wie ich die ausgabe von memory deuten soll.
Jedoch hat sich mein Problem erledigt denn aus ihrgend welche mir nicht ersichtlichen gründen habe ich heute scheinba genug speicher zur verfügung.

Auserdem war es hilfreich die matrix in single statt doubel zu speichern.


wenn ihrgend jemand mir erkleren möchte wie was die angaben die memory ausgibt bedeuten wäre ich dankbar.

ansonsten hat sich das hier erledigt


bis dann amper
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.