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

Ein XY-Datensatz in eine Matrix schreiben

 

mc-dope
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 19.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2012, 08:55     Titel: Ein XY-Datensatz in eine Matrix schreiben
  Antworten mit Zitat      
Ich habe eine Textdatei mit XY -Koordinaten und möchte eine Matrix erstellen, sodass an der jeweiligen Koordinate der Matrix eine 0 steht falls in der Textdatei die Koordinate vorhanden ist. Also den scatter-Befehl selbst mit einer for-schleife oder so Programmieren. Hat da jemand einen Ansatz?
Private Nachricht senden Benutzer-Profile anzeigen


Goofy9020
Forum-Century

Forum-Century


Beiträge: 164
Anmeldedatum: 10.08.11
Wohnort: ---
Version: 2009a, 2010b
     Beitrag Verfasst am: 19.07.2012, 08:57     Titel:
  Antworten mit Zitat      
Hey

sind die Werte aus der TXT Datei Integers (ganzzahlig), kann man diese direkt als Index verwenden?

Was soll in der Matrix stehen wenn es nicht in der TXT Datei vorkommt? NaNs? 1? andere Zahl?

Zuletzt bearbeitet von Goofy9020 am 19.07.2012, 09:04, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
mc-dope
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 19.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2012, 09:01     Titel:
  Antworten mit Zitat      
in der Textdatei stehen double-werte z.B. [-28.680 89.558]. Die Matrix soll so aussehen, als ob man ein Schwarz-Weiß bild mit dem Imread-Befehl einließt und sich die entstandene Matrix ansieht
Private Nachricht senden Benutzer-Profile anzeigen
 
Goofy9020
Forum-Century

Forum-Century


Beiträge: 164
Anmeldedatum: 10.08.11
Wohnort: ---
Version: 2009a, 2010b
     Beitrag Verfasst am: 19.07.2012, 09:05     Titel:
  Antworten mit Zitat      
Sollen die Werte dann gerundet werden für die Indizes?
Private Nachricht senden Benutzer-Profile anzeigen
 
mc-dope
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 19.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2012, 09:06     Titel:
  Antworten mit Zitat      
Nein gerundet nicht, aber man kann sie mit 1000 multiplizieren und hat ganzzahlige Werte.
Private Nachricht senden Benutzer-Profile anzeigen
 
Goofy9020
Forum-Century

Forum-Century


Beiträge: 164
Anmeldedatum: 10.08.11
Wohnort: ---
Version: 2009a, 2010b
     Beitrag Verfasst am: 19.07.2012, 09:15     Titel:
  Antworten mit Zitat      
Sind hier denn die x und y Werte wichtig oder könnte man alternativ einfach von 1 weg gehen. Weil eine Matrix kann keinen Index mit negativen Wert annehmen.

Dies kannst du dir mal überlegen wie du das realisieren möchtest. Für das weitere kannst du dann folgendes probieren:

Code:

x %Spalten Index
y %Zeilen Index

Matrix = ones(max(y),max(x));
indizes = sub2ind(size(Matrix),y,x);
Matrix(indizes)=0;
Private Nachricht senden Benutzer-Profile anzeigen
 
mc-dope
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 19.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2012, 09:20     Titel:
  Antworten mit Zitat      
Ja die x und y Werte sind wichtig. wenn in dem Datensatz z.B. eine Koordinate [10.056 54.068] heißt, soll die matrix soll dann an der stelle Matrix(10056,54068) eine 0 haben, wenn eine Koordinate nicht vorkommt, dann stht an der stelle der matrix der wert 255.
Private Nachricht senden Benutzer-Profile anzeigen
 
Goofy9020
Forum-Century

Forum-Century


Beiträge: 164
Anmeldedatum: 10.08.11
Wohnort: ---
Version: 2009a, 2010b
     Beitrag Verfasst am: 19.07.2012, 09:39     Titel:
  Antworten mit Zitat      
Ok, da bekommst du ne schöne große Matrix zusammen Wink
Wie sieht es mit negativen Werten aus? In einem vorigen Post hat du mal nen negativen Wert gepostet
Private Nachricht senden Benutzer-Profile anzeigen
 
mc-dope
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 19.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2012, 09:48     Titel:
  Antworten mit Zitat      
ja negative werte gibts auch, aber da muss man dann zu allen werten den kleinsten addieren, also den koordinatenursprung verschieben. ich merk auch grad, dass es sehr groß wird;)
Private Nachricht senden Benutzer-Profile anzeigen
 
mc-dope
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 19.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2012, 09:53     Titel:
  Antworten mit Zitat      
Also ich bin mit einer kleinen test Version fast am ziel:
die txt datei sieht so aus:
Code:

1   2
1   3
2   4
3   5
4   5
5   4
5   3
4   2
3   1
2   1


und der code dazu:

Code:

load kleinsel.txt;
selection=kleinsel;
[selsizen selsizem]=size(selection);
sortselx=sortrows(selection,1);
sortsely=sortrows(selection,2);
x_min=sortselx(1,1);
y_min=sortsely(1,2);
x_max=sortselx(selsizen,1);
y_max=sortsely(selsizen,2);
delta_x=x_max-x_min;
delta_y=y_max-y_min;
A=255*ones(delta_x,delta_y);
for i=1:selsizen
    A((selection(i,1)-x_min+1),selection(i,2)-y_min+1)=0;
end
 


jetzt muss ich nurnoch die x-achse umdrehen
Private Nachricht senden Benutzer-Profile anzeigen
 
Goofy9020
Forum-Century

Forum-Century


Beiträge: 164
Anmeldedatum: 10.08.11
Wohnort: ---
Version: 2009a, 2010b
     Beitrag Verfasst am: 19.07.2012, 10:01     Titel:
  Antworten mit Zitat      
da kann dir vlt. "fliplr" helfen
Private Nachricht senden Benutzer-Profile anzeigen
 
mc-dope
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 19.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2012, 10:27     Titel:
  Antworten mit Zitat      
OK jetzt hab ichs ( zumindest für einen einfachen Test Datensatz):
Code:

load kleinsel.txt;
selection=kleinsel;
[selsizen selsizem]=size(selection);
sortselx=sortrows(selection,1);
sortsely=sortrows(selection,2);
x_min=sortselx(1,1);
y_min=sortsely(1,2);
x_max=sortselx(selsizen,1);
y_max=sortsely(selsizen,2);
delta_x=x_max-x_min;
delta_y=y_max-y_min;
A=255*ones((delta_x+1),(delta_y+1));
selection(:,1)=fliplr(selection(:,1));
for i=1:selsizen
    ax=selection(i,1)-x_min+1;
    ay=selection(i,2)-y_min+1;
    A(ax,ay)=0;
end
A=flipud(A);
imwrite(A,'a.bmp');
 


Ps: bin Geodät, also sind X und Y Achse Vertauscht und deshalb brauchte ich den Befehl 'flipud'. danke für die HILFE!
Private Nachricht senden Benutzer-Profile anzeigen
 
mc-dope
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 19.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2012, 10:39     Titel:
  Antworten mit Zitat      
wie Groß kann so eine Matrix maximal sein? Und wie berechnet sich der Speicherbedarf einer Matrix? hab 4GB RAM.
Private Nachricht senden Benutzer-Profile anzeigen
 
Goofy9020
Forum-Century

Forum-Century


Beiträge: 164
Anmeldedatum: 10.08.11
Wohnort: ---
Version: 2009a, 2010b
     Beitrag Verfasst am: 19.07.2012, 10:41     Titel:
  Antworten mit Zitat      
Da kann ich dir leider nicht weiterhelfen. Bezüglich großen Matrizen wurde hier aber schon diskutiert.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 19.07.2012, 12:26     Titel:
  Antworten mit Zitat      
Hallo mc-dope,

Die maximale Größe von Arrays wird vom Befehl COMPUTER zurückgegeben (siehe "doc computer").
Der Speicherbedarf einer Matrix ist:
Code:
numel(X) * 8 + 100;  % Bytes

Hier benötigt ein DOUBLE-Element 8 Bytes. Ein SINGLE würde 4 Bytes benötigen. Die etwa 100 Bytes sind eine fester Overhead für den Header der Variablen. Siehe auch "whos X".

Gruß, Jan
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.