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

Zahlensequenz in anderer,großer matrix finden

 

n.force
Forum-Century

Forum-Century


Beiträge: 118
Anmeldedatum: 02.03.12
Wohnort: nähe Magdeburg
Version: ---
     Beitrag Verfasst am: 04.07.2015, 19:27     Titel: Zahlensequenz in anderer,großer matrix finden
  Antworten mit Zitat      
Hallo liebe Helfer,

Ich möchte überprüfen, ob eine zahlenfolge unter beachtung der reihenfolge in einer gegeben,großen matrix enthalten ist.

Also zum beispiel:
Code:
a=[3 7 9 5];
M=[ 1 2 3 4 5 6;
10 3 7 9 5 54;
86 46 8 4 7 89];

Test=isainM(a,M)


Test sollte jetzt also 1 sein, da a in M ist.

Wie kann ich das denn bewerkstelligen?

Ich habe Leider keinen ansatz; auch nicht mit der hilfe von google.

Vielen dank für eure hilfe.
Genießt das wetter Smile
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: 04.07.2015, 20:06     Titel:
  Antworten mit Zitat      
Hallo,

soll die Sequenz von links nach rechts auftauchen, oder geht auch von oben nach unten? Kann sie zeilenübergreifend sein?

Eine Strategie könnte sein, per logischer Indizierung die Stellen zu ermitteln, an denen die erste Zahl des Musters steht, und dann mit einer for-Schleife schauen, ob die weiteren Stellen passen. Etwas wirklich elegantes fällt mir da nicht ein.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
n.force
Themenstarter

Forum-Century

Forum-Century


Beiträge: 118
Anmeldedatum: 02.03.12
Wohnort: nähe Magdeburg
Version: ---
     Beitrag Verfasst am: 04.07.2015, 20:16     Titel:
  Antworten mit Zitat      
Hallo Harald,

Die sequenz kann nur nebeneinander stehen. Auch die reihenfolge muss genauso sein, wie in dem vektor a.

For schleifen würde ich aus perfomancegründen gern vermeiden.

Ich hatte es auch schon mit findstr() versucht, aber das klappt auch nicht wirklich.

Ich kann mir einfach nicht vorstellen, dass es da nichts elegantes gibt Sad
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: 04.07.2015, 22:04     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
For schleifen würde ich aus perfomancegründen gern vermeiden.

Hast du's denn mal versucht? Wie groß sind die beteiligten Matrizen in der realen Anwendung?

Zitat:
Ich hatte es auch schon mit findstr() versucht, aber das klappt auch nicht wirklich.

Ist ja auch für Strings gedacht. Und: es ist immer hilfreich, wenn du schreibst, was du genau versucht hat.

Zitat:
Ich kann mir einfach nicht vorstellen, dass es da nichts elegantes gibt

Och, es ist gut möglich, dass es etwas gibt. Mir ist jedoch nichts in der Hinsicht bekannt.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 04.07.2015, 22:21     Titel:
  Antworten mit Zitat      
ich würde strfind verwenden und nicht findstr aber sonst kann ich mich da nur harald anschließen. ohne das beispiel was du versuchst hast können wir keine verbesserungsvorschläge machen. und forschleifen sind nicht generell langsam. kommt immer auf das problem an.
_________________

richtig Fragen
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: 05.07.2015, 15:35     Titel: Re: Zahlensequenz in anderer,großer matrix finden
  Antworten mit Zitat      
Hallo n.force,

Es ist zwar ineffizient zu raten, aber es ist heute so heiß, also was soll's:
Code:
function R = isainM(a,M)
R = false;
for k = 1:size(M, 1)
  if any(strfind(M(k, :), a)
    found = true;
    return;
  end
end

Man könnte M auch in einen Vector "reshapen" und dann ohne Schleife darin suchen. Das benötigt aber wieder mehr Speicher. Ob das schneller ist hängt davon ab, ob dieser zusätzliche Speicher noch in den Cache des Prozessors passt.
Die Größen von a und M spielen auch eine Rolle dabei, ob diese Schleife effizienter ist als ein vollständig vektorisierter Code. Auf jeden Fall ist die Schleife schnell geschrieben. Und was nutzt es 0.1 Sekunden Rechenzeit zu gewinnen und dafür 3 Minuten Programmierzeit zu investieren?

Generell kann ich Harald und Winkow nur recht geben: Bitte poste den Code, den Du versucht hast. Erkläre, wie groß die Arrays üblicherweise oder maximal sind. Die Erklärung, dass Du FOR-Schleifen aus "Performance-Gründen" vermeiden möchtest, ist nicht haltbar. Seit über 10 Jahren verbssert Matlab's JIT-Acceleration die Effizienz von FOR-Schleifen z.T. massiv. Bevor man sich also Gedanken über die Geschwindigkeit von Schleifen macht, muss man es unbedingt ausprobieren. Von vornherein Schleifen abzulehnen ist eine "Pre-mature optimization".

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
n.force
Themenstarter

Forum-Century

Forum-Century


Beiträge: 118
Anmeldedatum: 02.03.12
Wohnort: nähe Magdeburg
Version: ---
     Beitrag Verfasst am: 07.07.2015, 11:41     Titel:
  Antworten mit Zitat      
Viele Dank euch allen.

Funktioniert sehr gut.

Ich habe wohl noch einigen Nachholebedarf in MATLAB Smile
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.