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

"Diagonale" finden in Rechteck-Matrix

 

Premutos
Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 29.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2015, 11:49     Titel: "Diagonale" finden in Rechteck-Matrix
  Antworten mit Zitat      
Moin Community,

meine Problem: Hab eine Matrix von ca. 70x2000(y,x).
Ich will daraus in etwa die Diagonale finden. Eine Annäherung reicht. Der "diag" Befehl hilft mir dabei nicht. Ich dachte mir ich teile x/y und gehe dann genau so viele Stellen entlang der x Achse, dann eine Zeile weiter runter in der Matrix und wieder genau so weit in x Richtung, nur diesmal mit einem Offset von genau dem Wert von x/y. Das nähert das ganze ausreichend an. Ich weiss nicht ob es eine Funktion gibt die so etwa tut. Ich dachte mir ich schreibe eine Schleife. Kurz gesagt: Ich habe die Test Matrix mit 4x16. Ich will jetzt aus der ersten Zeile die Werte 1:4, aus der zweiten Zeile die Werte 5:8, aus der dritten Zeile 9:12 und aus der vierten 13:16.

Die Schleife funktioniert so weit ganz schlecht. Sie macht was ich will, holt mir aber für jede Zeile immer nur die Werte 1:4, und vernachlässigt das Offset.

Code:

clc, clear all, close all
b = round(100*rand(4,16));
f = zeros(4,4);
for x = 1:4
    xpos = x;
    for y = 1:4
        ypos = y;
        f(ypos,xpos) = b(ypos,xpos);
        if x == max(xpos)+1
        xpos = xpos+4;
        end
    end
end
 


Bin für Anregungen und verbesserungen dankbar, bin noch nicht so lange mit matlab zu ganze.

Danke im Voraus!

Gruss,
P.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.06.2015, 12:52     Titel:
  Antworten mit Zitat      
Hallo,

ein möglicher Ansatz:
Code:
A = reshape(1:64, 16, 4)';
colidx = 1:size(A,2);
rowidx = round(interp1([1 size(A, 2)], [1 size(A,1)], colidx));
linidx = sub2ind(size(A), rowidx, colidx);
A(linidx)


Liefert zwar noch nicht genau das gewünschte, aber mit ein paar Anpassungen klappt das vielleicht. Die Idee dahinter ist, für jeden Spaltenindex den zugehörigen Zeilenindex durch Interpolation zu ermitteln.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Premutos
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 29.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2015, 20:10     Titel:
  Antworten mit Zitat      
Danke erstmal für die Antwort!!

Gibt es vielleicht von jemand anderem noch einen weiteren Vorschlag?
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: 28.06.2015, 02:12     Titel: Re: "Diagonale" finden in Rechteck-Matrix
  Antworten mit Zitat      
Hallo Premutos,

Ich bin mir nicht sicher, ob ich die Frage richtig verstehe.
Suchst Du für eine 70x2000 Matrix die Elemente, die auf der Diagonalen liegen, z:b. von Links oben nach rechts unten?
Dann wären die Indizes für die längere Dimension hier 1:2000, und die der kürzeren:
Code:
linspace(1, 70, 2000)
% oder:
round(linspace(0.5, 69.5, 2000))

Hilft das bereits?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Premutos
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 29.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.06.2015, 03:59     Titel:
  Antworten mit Zitat      
Hallo Jan,

danke für deine Antwort.
Ich habe mehrere unterscheidlich große Matrizen aber testhalber hier nur eine kleine, die ich dann auf die große umschreibe.
In der Matrix stehen Z-Positionen eine Fläche im Raum. Die zugehörigen X und Y Positionen habe ich bereits. Problem ist nur das die Z Positionen die mich interessieren entlang der "Diagonalen" der Rechteckmatrix stehen, also von links oben nach rechts unten. Ich brauche auch genau die Werte aus der Matrix und keine gerundeten etc.

Deshalb dachte ich bei einer Testmatrix von 4x16, suche ich aus der ersten Zeile die Werte 1:4, aus der zweiten Zeile die Werte 5:8, aus der dritten Zeile 9:12 und aus der vierten 13:16. Das müsste die Sache ausreichend annähern, da ich mich entlang der "Diagonalen" bewege. Das kann ich dann auf die große Matrix umschreiben. Nur leider tut meine oben geschriebene Schleife immer nur die Werte 1:4 aus der Testmatrix holen. Schön wäre es wenn das erstmal für die Testmatrix funktionieren würde.

Hoffe das hilft als Erklärung. Danke bis hier!

Gruss,
P.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.06.2015, 10:28     Titel:
  Antworten mit Zitat      
Hallo,

dein Code enthält geschachtelte for-Schleifen, unintuitive Variablennamen und ist nicht dokumentiert. Es ist daher schwierig zu verstehen, was der genaue Gedankengang bei dem Code ist.

Jan S. und ich haben dir jeweils einen Vorschlag gemacht, wie du das Problem lösen kannst. Hast du diese Vorschläge denn mal getestet? Ich vermute nicht, denn du schreibst
Zitat:
Ich brauche auch genau die Werte aus der Matrix und keine gerundeten etc.

Unsere Vorschläge runden nicht die Werte, sondern deren Indizes.

Eine Anpassung meines Codes, die zumindest im gewählten Beispiel genau das gewünschte liefert:
Code:
linidx = sub2ind(size(A), round(rowidx-size(A,1)/size(A,2)), colidx);


Grüße,
Harald
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.