Jump to content



Matlab συγκριση πινακων διαφορετικων διαστασεων


teo$

Recommended Posts

Εστω οτι εχω 2 πινακες που θελω να τους συγκρινω με τον εξης τροπο:θελω να διατρεχω τον μικρο πανω στον μεγαλο και να φτιαχνω ενα τριτο με περιεχομενο τις διαφορες των στοιχειων των 2 πρωτων.Οποτε αναρωτιεμαι πως γινεται αυτο και σε περιπτωση που ο ενας δεν χωρα ακριβως στον αλλο ετσι ωστε να μην προκυψει περιπτωση που θα βγαινω απεξω ή να μην παιρνω καποια στοιχεια.Υπαρχει επικαλυψη στο matlab και αν ναι πως ακριβως γινεται(υπαρχει καποια ετοιμη συναρτηση η κατι τετοιο?).Φανταζομαι οτι θα πρεπει να χρησιμοποιω καποιο βημα (ας πουμε 1) για να τον διατρεχω.Ειναι σωστος τροπος αυτος (αν υπαρχει)?Εχετε να προτεινετε κατι αλλο?

Link to comment
Share on other sites


d = [ 6 4 2 9];
find(d == 2)

ans =

3

if 2 is not an element of x, find returns an empty array.

Ο παραπάνω κώδικας δουλεύει κανονικά? (δεν έχω Matlab).Αν παίζει τότε θα κάνεις ένα for για κάθε στοιχείο του μικρότερου πίνακα (αυτού με τα λιγότερα στοιχεία) χρησιμοποιώντας την find για να ελέγξεις αν υπάρχει το στοιχείο στον μεγάλο πίνακα (αυτόν με τα περισσότερα στοιχεία).Αν υπάρχει το αποτέλεσμα της find θα είναι το index στον μεγάλο πίνακα.Αν είναι άδειο (κοινώς δεν το βρήκε) τότε βάζεις το στοιχείο που έψαξες στον νέο πίνακα που κρατάει τα διαφορετικά στοιχεία.

Link to comment
Share on other sites

Βασικα η λεξη ¨συγκρινω¨ ειναι ισως λιγο ακυρη.Αυτο που θελω ειναι να εχω τον μεγαλο και να διατρεχω πανω του τον μικρο πινακα και να φτιαχνω ενα τριτο που να περιεχει τις διαφορες των 2 πρωτων.Εστω οτι εχω 2 δισδιαστατους πινακες Α,Β διαφορετικων διαστασεων,ας πουμε 90χ90 ο Α και 3χ3 ο Β, και θελω να φτιαχνω το C=A-B "βαζοντας πανω" στον Α τον Β.Δεν ξερω αν αυτο γινεται με επικαλυψη ή τελοσπαντων αν υπαρχει αυτη η εννοια στο matlab ή κατι παρομοιο.

Ελπιζω τωρα να εγινα περισσοτερο κατανοητος.

Link to comment
Share on other sites

Βασικα η λεξη ¨συγκρινω¨ ειναι ισως λιγο ακυρη.Αυτο που θελω ειναι να εχω τον μεγαλο και να διατρεχω πανω του τον μικρο πινακα και να φτιαχνω ενα τριτο που να περιεχει τις διαφορες των 2 πρωτων.Εστω οτι εχω 2 δισδιαστατους πινακες Α,Β διαφορετικων διαστασεων,ας πουμε 90χ90 ο Α και 3χ3 ο Β, και θελω να φτιαχνω το C=A-B "βαζοντας πανω" στον Α τον Β.Δεν ξερω αν αυτο γινεται με επικαλυψη ή τελοσπαντων αν υπαρχει αυτη η εννοια στο matlab ή κατι παρομοιο.

Ελπιζω τωρα να εγινα περισσοτερο κατανοητος.

Εμένα με μπέρδεψε λίγο αυτό. Τί εννοείς με το μαρκαρισμένο κείμενο?

Link to comment
Share on other sites

Λοιπον ας αναφερω το σκοπο για να γινει πιο κατανοητο το προβλημα μου.

Θελω να συγκρινω περιοχες και συγκρεκριμενα τα υψομετρα τους.Δηλαδη εχω ενα πινακα με τα υψομετρα σε καθε σημειο της Κρητης και ενα αντιστοιχο του Ηρακλειου και αυτο που θελω ειναι να φτιαξω τριτο με τις διαφορες των υψομετρων αυτων των 2 περιοχων ετσι ωστε εκει που θα εχει μηδενικες να θεωρω εγω με βαση αυτο που θελω να βγαλω σαν αποτελεσμα οτι μοιαζουν υψομετρικα.Οπως αναφερω και πιο πανω ο πινακας του Ηρακλειου ειναι σαφως μικροτερος απο της Κρητης οποτε θελω να συγκρινω τον πινακα του Ηρακλειου με της Κρητης "διατρεχοντας" τον πανω στης Κρητης για να κανω συγριση καθε κομματιου του πινακα της Κρητης με τον πινακα του Ηρακλειου.

Γιαυτο αναρωτιομουν αν υπαρχει επικαλυψη στο matlab ή κατι τετοιο.

Εγινα πιο κατανοητος?Καταλαβατε τωρα τι ακριβως προσπαθω να κανω?

Link to comment
Share on other sites

Θα πρέπει να κάνεις εσυ την επικάλυψη.Κοινώς να χωρίσεις τον πίνακα υψομέτρων της Κρήτης σε μικρότερους υποπίνακες ίδιων διαστάσεων με τον πίνακα υψομέτρων του Ηρακλείου και μετά να κάνεις την "σύγκριση".

Link to comment
Share on other sites

Αυτό που είπε ο nucleus.

Θα σου πρότεινα να βγάλεις ένα διάνυσμα που θα παράγεται από τα στοιχεία ενός πίνακα (α χ β, όπου α, β οι διαστάσεις του πίνακα που περέχει τα υψομετρικά δεδομένα για το Ηράκλειο).

Αν χρησιμοποιήσεις αυτή την τεχνική τότε δεν χρειάζεται να χωρίσεις τον πίνακα της Κρήτης σε πολλαπλάσια των διαστάσεων του Ηρακλείου.

π.χ.

Έστω compute_vector(pinaka) η συνάρτηση που επιστρέφει το διάνυσμα (μπορεί να είναι και απλά ένας αριθμός) και ο πίνακας της Κρήτης 150χ800 στοιχεία και του Ηαρακλείου 10χ10 (τυχαία νούμερα μη βαράς).

Υπολογίζεις το διάνυσμα για το Ηράκλειο

και μετά αρχίζεις από το 0,0 της Κρήτης και παίρνεις τον πρώτο υποπίνακα [0-10, 0-10] Υπολογίζεις το διάνυσμα και συγκρίνεις με του Ηρακλείου.*

Αυξάνεις κατά 1 τη μία διάσταση και υπολογίζεις μέχρι να φτάσεις στο τέρμα της.

Αυξάνεις και την άλλη διάσταση και υπολογίζεις ξανά κλπ κλπ..

Το πώς θα υπολογίζεις το διάνυσμα είναι λίγο τρικ, δεν έχω κάποια ιδέα αλλά μπορεί να βρεις κάτι στο νετ.

* Μπορείς να βάλεις και πόσο απόκλιση θα έχεις απο το αποτέλεσμα. Μπορεί να θέλεις να δέχεσαι ότι είναι περίπου ΟΚ άμα έχουν 10 μονάδες του διανύσματος διαφορά (αυθαίρετο).

Σε μπέρδεψα? Στο μυαλό μου ήταν μάλλον λίγο πιο απλό..:yes2:

Link to comment
Share on other sites

Ξανασκέψου το πρόβλημα σαν εφαρμογή ενός FIR φίλτρου σε 2D data (παράδειγμα: denoising σε εικόνες). Και μετά χρησιμοποίησε τις αντίστοιχες συναρτήσεις (πχ filter2).

Link to comment
Share on other sites

Το ismember δεν μου κανει διοτι δεν θελω να δω ποσα στοιχεια απο τον ενα πινακα ανηκουν στον αλλο αλλα τις διαφορες μεταξυ τους.Το mat2cell παλι ισως βοηθαει καπως αλλα δεν με αφηνει να βαλω διαστασεις που θελω διοτι λεει πρεπει το αθροισμα να ισουται με τις διαστασεις του μεγαλου πινακα.Πρεπει να το κοιταξω ομως λιγο ακομα αυτο.

Αυτο που δεν καταλαβαινω καθολου μιας και δεν ξερω πολλα απο matlab ειναι οσα γραφει ο φιλος dop με τα φιλτρα κτλ.Δεν εχω ιδεα οποτε αν μπορει ας δωσει μια παραπανω βοηθεια.

Γενικα ευχαριστω για τις συμβουλες και οσα προτεινετε και περιμενω οτι αλλο σημαντικο μπορειτε να μου πειτε

Link to comment
Share on other sites

Δεν έχω πλέον πρόσβαση σε Matlab και να τα ξαναθυμηθώ πως γίνονται όλα αυτά θα μου πάρει καμιά βδομάδα. Κάπου έχω αντίστοιχο κώδικα που κάνει filtering εικόνα με παραπλήσια λογική, αλλά πρέπει πρώτα να θυμηθώ/βρω που είναι.

Τώρα που ξαναδιαβάζω το post, μου φαίνεται ότι προσπαθείς να κάνεις 2D correlation/convolution (αλοίμονο αν θυμάμαι πως είναι στα ελληνικά). Εν τω μεταξύ, μπορείς να διαβάσεις 2-D digital filter - MATLAB και 2-D convolution - MATLAB Στο 2d correlation/convolution? - Newsreader - MATLAB Central φαίνεται ότι ο/η Bo προσπαθεί να κάνει το ίδιο.

BTW, ξεκίνα πρώτα από την καθεαυτού μαθηματική έκφραση του αλγορίθμου - ίσως το κάνει λίγο πιο ξεκάθαρο πως πρέπει να το προσεγγίσεις.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Δημιουργία...

Important Information

Ο ιστότοπος theLab.gr χρησιμοποιεί cookies για να διασφαλίσει την καλύτερη εμπειρία σας κατά την περιήγηση. Μπορείτε να προσαρμόσετε τις ρυθμίσεις των cookies σας , διαφορετικά θα υποθέσουμε ότι είστε εντάξει για να συνεχίσετε.