Dr.Fuzzy Δημοσ. 4 Απριλίου 2016 Μέλος Δημοσ. 4 Απριλίου 2016 Δηλαδή, κάνοντας install το anfis παίρνεις και το membership; Ακριβώς! https://github.com/twmeggs/anfis
pmav99 Δημοσ. 4 Απριλίου 2016 Δημοσ. 4 Απριλίου 2016 Δηλαδή, κάνοντας install το anfis παίρνεις και το membership;Ναι είναι subpackage https://github.com/twmeggs/anfis/tree/master/anfis Πάντως ξανακοιτώντας το structure νομίζω ότι την ταρζανιά την κάνει το spyder και όχι το pycharm
Dr.Fuzzy Δημοσ. 4 Απριλίου 2016 Μέλος Δημοσ. 4 Απριλίου 2016 Αφού κάνεις pip install, το anfis θα πρέπει να πάει στο site-packages (ή όπως το λένε στο λειτουργικό σου). Είναι στο site-packages και το anfis και το scikit-fuzzy (σε macos είμαι). Το directory «pkg» τι ρόλο βαράει; Γιατί το έχεις στο directory που δουλεύεις; Δοκίμασε να το μετακινήσεις/μετονομάσεις για να μην παίζει κανένα ρόλο και μετά ξαναδοκίμασε. Κανένα ρόλο (απλά το είχα for archiving). Το έχω βγάλει εντελώς. (post #7) Επίσης είσαι με python 2 ή 3; 2
pmav99 Δημοσ. 4 Απριλίου 2016 Δημοσ. 4 Απριλίου 2016 Μάλλον τρέχεις python 3 στο pycharm... Ιδού: Python 3 (fuzzy3) $ ipython Python 3.5.1 (default, Mar 3 2016, 09:29:07) Type "copyright", "credits" or "license" for more information. IPython 4.1.2 -- An enhanced Interactive Python. ? -> Introduction and overview of IPython's features. %quickref -> Quick reference. help -> Python's own help system. object? -> Details about 'object', use 'object??' for extra details. In [1]: import anfis --------------------------------------------------------------------------- ImportError Traceback (most recent call last) <ipython-input-1-54ebb5946aae> in <module>() ----> 1 import anfis /home/feanor/.virtualenvs/fuzzy/lib/python3.5/site-packages/anfis/__init__.py in <module>() 1 import anfis ----> 2 from membership import membershipfunction 3 from membership import mfDerivs ImportError: No module named 'membership' Python 2 (fuzzy2) $ ipython iPython 2.7.11 (default, Mar 31 2016, 06:18:34) Type "copyright", "credits" or "license" for more information. IPython 4.1.2 -- An enhanced Interactive Python. ? -> Introduction and overview of IPython's features. %quickref -> Quick reference. help -> Python's own help system. object? -> Details about 'object', use 'object??' for extra details. In [1]: import anfis In [2]: anfis. anfis.anfis anfis.membership anfis.membershipfunction anfis.mfDerivs In [2]: anfis.anfis. anfis.anfis.ANFIS anfis.anfis.copy anfis.anfis.itertools anfis.anfis.np anfis.anfis.backprop anfis.anfis.forwardHalfPass anfis.anfis.mfDerivs anfis.anfis.predict In [2]: anfis.anfis.ANFIS Out[2]: <class anfis.anfis.ANFIS at 0x7fd709ea8f58> In [3]: anfis.mem anfis.membership anfis.membershipfunction In [3]: anfis.membership Out[3]: <module 'anfis.membership' from '/home/feanor/.virtualenvs/fuzzy2/lib/python2.7/site-packages/anfis/membership/__init__.pyc'> Ξαναφτιάξε το virtual env και όρισε σωστά το --python Άσχετο: Κάτι τέτοια είναι που με κάνουν να μη θέλω τα IDEs edit Αν θες να καταλάβεις ποια είναι η διαφορά στα imports μεταξύ των εκδόσεων τότε διάβασε αυτό https://www.python.org/dev/peps/pep-0328/
Dr.Fuzzy Δημοσ. 4 Απριλίου 2016 Μέλος Δημοσ. 4 Απριλίου 2016 Μαζί σου, ούτε εγώ τα γουστάρω ιδιαίτερα...συνήθως είμαι me gedit, nano, vim για γρήγορα πράγματα, αλλά αν γράφεις C++ και έχεις ext APIs που χρησιμοποιείς (π.χ., ROS, PCL, OpenGL, κλπ) κλπ...το eclipse CDT βοηθάει ότι και να λέμε να δεις docs για classes, types, κλπ. Λοιπόν, το τσέκαρα και όχι ο project interpreter χρησιμοποιεί Python 2.7.11...Δες το screenshot Thx για το link, το έχω ξαναδεί.
pmav99 Δημοσ. 5 Απριλίου 2016 Δημοσ. 5 Απριλίου 2016 Αυτό που μετράει είναι το τι έχεις στο Run/edit configurations και όχι στο project default. Τσέκαρε το, αν δεν είναι και αυτό τότε δεν έχω ιδέα τι γίνεται. Αν το πρόβλημα εξακολουθεί, η πρότασή μου είναι να κάνεις ένα clean virtualenv και να τα κάνεις όλα εκεί βήμα-βήμα μέχρι να βρεις τι πάει στραβά.
groot Δημοσ. 5 Απριλίου 2016 Δημοσ. 5 Απριλίου 2016 Θα πρότεινα να βγάλεις το anfis από το project structure. Εφόσον είναι στο site-packages δεν χρειάζεται να είναι εκεί. Εάν το membership καλεί modules/functionalities από το anfis και δεν έρχεται μαζί με το anfis, τότε θα το βρει επειδή υπάρχει στο site-packages. Αυτό που εικάζω είναι ότι ο colleague έκανε develop το membership και για αυτό είχε τα αρχεία του anfis μέσα στο project structure (λάθος).
Dr.Fuzzy Δημοσ. 5 Απριλίου 2016 Μέλος Δημοσ. 5 Απριλίου 2016 Θα πρότεινα να βγάλεις το anfis από το project structure. Εφόσον είναι στο site-packages δεν χρειάζεται να είναι εκεί. Το έχω βγάλει (post #18)... @pmav99 Τρέχω το community edition...δεν το βρίσκω κάπου στα prefs αυτό που δείχνεις (δες screenshot στο #20). Άκυρο στραβομάρα (δεν είναι στα prefs...). Τα ίδια και εδώ, 2.7.11...
groot Δημοσ. 5 Απριλίου 2016 Δημοσ. 5 Απριλίου 2016 Ναι βρε... εγώ έγραψα να το βγάλεις από το project structure Α! ΟΚ! Είδα το #7. Χμ... θα ήταν εύκολο ένα ss με το νέο proj struct;
pmav99 Δημοσ. 5 Απριλίου 2016 Δημοσ. 5 Απριλίου 2016 @Dr Fuzzy Δεν είναι στα prefs. Είναι στο menu Run/ Edit configurations.
Dr.Fuzzy Δημοσ. 12 Απριλίου 2016 Μέλος Δημοσ. 12 Απριλίου 2016 ...σήμερα που βρήκα λίγο χρόνο άλλαξα την κλάση Metrics υιοθετώντας διάφορα που προτείνατε. Όποια σχόλια για διορθώσεις/αλλαγές/βελτιώσεις καλοδεχούμενα. from __future__ import division from __future__ import print_function from __future__ import absolute_import import numpy as np import matplotlib.pyplot as plt class Metrics(object): """ Class that contains all metrics """ def __init__(self, time, gamma, phi, c, archive_K, archive_D, archive_a, archive_u): self.time = time self.gamma = gamma self.phi = phi self.c = c self.archive_K = archive_K self.archive_D = archive_D self.archive_a = archive_a self.archive_u = archive_u self.mrt = None def calc_metric(self, metric_name): """ Calculate chosen metric. """ if metric_name == 'mrt': # sanity check if len(self.archive_D) != len(self.archive_a): raise ValueError("Archives with different length: <%r>, <%r>" % (self.archive_D, self.archive_a)) gamma, phi, archive_D, archive_a = self.gamma, self.phi, self.archive_D, self.archive_a self.mrt = mrt = np.zeros_like(archive_D, dtype=np.float) # main algorithm for i, (a, D) in enumerate(zip(archive_a, archive_D)): g = D / a if a != 0 else 1000 k = gamma * (g - phi) mrt[i] = np.exp(k) if g < 0.8 else 1 + k return mrt elif metric_name == 'rms': return np.sqrt(np.linalg.norm(self.archive_u - self.c * self.archive_a)**2 / self.time) else: msg = "Not known metric '%s'!" % metric_name raise ValueError(msg) def plot_metric(self, metric_name, x_label = None, y_label = None, marker = None, line_width = None): """ Plot chosen metric. """ _metrics = { 'mrt': {'val': [self.mrt], 'xlabel': 'time interval', 'ylabel': 'mRT (s)', 'marker': ['b'], 'linewidth': 1.5}, 'cpu': {'val': [self.archive_a, self.archive_u], 'xlabel': 'time interval', 'ylabel': 'CPU (%)', 'marker': ['b', 'k'], 'linewidth': 1.5}, 'gain': {'val': [self.archive_K], 'xlabel': 'time interval', 'ylabel': 'gain', 'marker': ['b'], 'linewidth': 1.5} }; if x_label is None: x_label = _metrics[metric_name]['xlabel'] if y_label is None: y_label = _metrics[metric_name]['ylabel'] if marker is None: marker = _metrics[metric_name]['marker'] if line_width is None: line_width = _metrics[metric_name]['linewidth'] plot_val = _metrics[metric_name]['val'] if metric_name is 'mrt' and self.mrt is None: msg = "mRT cost has not been calculated. Call <calc_mrt_cost()> and try again!" raise ValueError(msg) if metric_name is 'cpu' and len(marker) is not 2: msg = "<plot_metric()> for '%s' requires exactly 2 markers (%d defined)!" % (metric_name, len(marker)) raise ValueError(msg) for count in range(0,len(plot_val)): plt.plot(plot_val[count], marker[count], linewidth=line_width) plt.xlabel(x_label) plt.ylabel(y_label) #plt.box(on=True) plt.show() # Test metrics = Metrics(100, 10, 0.8, 0.95, np.array(range(10)).T, np.array(range(8)).T, np.array(range(8)).T, np.array(range(8)).T)[/font] x = metrics.calc_metric('mrt') # compute mRT cost metrics.plot_metric('mrt', 'time interval', 'mRT (s)', None, 1) # plot mRT cost metrics.plot_metric(metric_name = 'cpu', x_label = 'time interval', y_label = 'CPU (%)', marker = ['go', 'r'], line_width = 1) # plot gain metrics.plot_metric('gain', 'time interval', 'Gain', ['g--'], 1) # plot gain
pmav99 Δημοσ. 13 Απριλίου 2016 Δημοσ. 13 Απριλίου 2016 μια πρώτη παρατήρηση. Υπάρχει πραγματικά λόγος τα markers και τα linewidth να είναι configurable; Και αν υπάρχει, δεν είναι καλύτερα να τα κάνεις μία φορά configure και μετά τέλος; Το λέω αυτό γιατί συνήθως θελουμε ενιαία παρουσίαση σε όλα τα διαγράμματα. Για να το πετύχουμε αυτό, χρειάζεται κάτι τέτοιο: http://matplotlib.org/users/customizing.html#dynamic-rc-settings Πχ import matplotlib as mpl # Set up the matplotlib figures. mpl.rcParams['lines.linewidth'] = 2.3 mpl.rcParams['font.size'] = 12 mpl.rcParams['font.family'] = 'serif' mpl.rcParams['mathtext.fontset'] = 'stix' # μπορεί να μην την έχεις! mpl.rcParams['axes.labelsize'] = 'x-large' mpl.rcParams['xtick.labelsize'] = 'medium' mpl.rcParams['ytick.labelsize'] = 'medium' mpl.rcParams['legend.fontsize'] = 'large' Κάτι άλλο που είναι χρήσιμο είναι εκτός από διαφορετικά χρώματα, να χρησιμοποιούμε διαφορετικά dashes ώστε να βγαίνει άκρη από τα διαγράμματά μας ακόμα και αν εκτυπωθούν ασπρόμαυρα. Ένας τρόπος για να το πετύχουμε αυτό είναι o εξής: import matplotlib.pyplot as plt LINE_STYLES = { 'black': {'marker': None, 'dash': (None,None), 'color' : 'black'}, # Continuous line 'b': {'marker': None, 'dash': [5,5], 'color' : 'b'}, 'g': {'marker': None, 'dash': [5,3,1,3], 'color' : 'g'}, 'r': {'marker': None, 'dash': [5,3,1,2,1,10], 'color' : 'm'}, 'c': {'marker': None, 'dash': [5,2,5,2,5,10], 'color' : 'c'}, 'm': {'marker': None, 'dash': [1,3], 'color' : 'r'} #'y': {'marker': 'o', 'dash': [None,None]} # Continuous line with markers } def apply_line_styles(figure, line_styles=LINE_STYLES): """ Apply line styles to the figure. """ for ax in figure.axes: for line in ax.get_lines(): original_color = line.get_color() line_style = line_styles[original_color] line.set_dashes(line_style['dash']) line.set_marker(line_style['marker']) line.set_color(line_styles['color']) figure = plt.figure() plt.plot(range(4), [i**2 for i in range(4)]) plt.plot(range(4), [i**3 for i in range(4)]) plt.plot(range(4), [i**4 for i in range(4)]) apply_line_styles(figure) plt.show() Πάνε αρκετά χρόνια από τότε που έγραψα το παραπάνω, οπότε ίσως σήμερα να υπάρχει και καλύτερος τρόπος να κάνεις το ίδιο πράγμα. edit ------------ Α ναι, αν σε ενδιαφέρει η εμφάνιση, θες να δεις κάποια βιβλιοθήκη σαν τη http://stanford.edu/~mwaskom/software/seaborn/ κατά πάσα πιθανότητα θα έχει και καλύτερο API από αυτό που προτείνω πιο πάνω. edit 2 Δες και αυτό: http://stackoverflow.com/a/34577275/592289
Dr.Fuzzy Δημοσ. 13 Απριλίου 2016 Μέλος Δημοσ. 13 Απριλίου 2016 @pmav99 Σχετικά με τη πρώτη παρατήρηση, έτσι όπως το έχω κάνει έχω τη δυνατότητα να αλλάζω το linewidth, markers, colors, κλπ σε κάθε graph ξεχωριστά. Με το rcParams δηλώνω καθολικά τα settings να ισχύουν σε όλα τα graphs, πχ, ίδιο linewidth παντού, το οποίο δε θέλω. Νομίζω με το dict είναι αρκετά ευέλικτος ο τρόπος και συμμαζεμένος. Θα μπορούσα απλά να τα έχω με τον ίδιο τρόπο hardcoded αλλά με τα method args έχω την ευελιξία να κάνω reconfigure τα graphs με minimum cost. Σχετικά με τη δεύτερη, για τα markers, αν έχω καταλάβει, το κάνω αυτό που λες. Αν δεις έχω: marker = ['go', 'r'] δηλαδή green με circles και η δεύτερη red ή ['g--'] δηλαδή green με dashes. Δεν ξέρω αν εννοείς κάτι άλλο.
pmav99 Δημοσ. 13 Απριλίου 2016 Δημοσ. 13 Απριλίου 2016 Σχετικά με τη πρώτη παρατήρηση, έτσι όπως το έχω κάνει έχω τη δυνατότητα να αλλάζω το linewidth, markers, colors, κλπ σε κάθε graph ξεχωριστά. Το ερώτημα είναι, για ποιο λόγο; Δηλαδή όταν θα τρέχεις την εφαρμογή σου θα φτιάχνεις ένα διάγραμμα με linewidth 2 και μετά ένα με 3; Αν ναι, τότε καλά το έκανες. Αν όχι τότε τζάμπα περιπλέκεις τα πράγματα. Και για να είναι ξεκάθαρο, σύμφωνα με την εμπειρία μου, το σετάρισμα του matplotlib στην πλειοψηφία των περιτπώσεων πρέπει να γίνεται μία φορά στην αρχή και τέλος. Πειραματίζεσαι δηλαδή για να δεις ποια settings σου αρέσουν, βάζεις το matplotlib να τα χρησιμοποιεί με το που ξεκινάς την εφαρμογή σου και δεν ξαναασχολείσαι. Σχετικά με τη δεύτερη, για τα markers, αν έχω καταλάβει, το κάνω αυτό που λες. Αν δεις έχω: marker = ['go', 'r'] δηλαδή green με circles και η δεύτερη red ή ['g--'] δηλαδή green με dashes. Δεν ξέρω αν εννοείς κάτι άλλο. Δεν κάνουμε ακριβώς το ίδιο. Στη συγκεκριμένη περίπτωση κάνεις hard code κάποια settings για ένα συγκεκριμένο figure (το figure σου μάλιστα έχει μόνο μία γραμμή). Αυτό που πρότεινα είναι λίγο πιο γενικό. Σκέψου πχ να έχεις να κάνεις N plots το οποίο θα έχει πχ 4 γραμμές το καθένα. Με τον τρόπο που προτείνω οι αντίστοιχες γραμμές και των Ν plots θα έχουν τα ίδια ακριβώς settings (πχ η πρώτη γραμμή όλων των figures θα είναι blue, με dash [5-5], η δεύτερη γραμμή red με dash [5, 3, 1, 3] κτλ).
Dr.Fuzzy Δημοσ. 13 Απριλίου 2016 Μέλος Δημοσ. 13 Απριλίου 2016 Το ερώτημα είναι, για ποιο λόγο; Δηλαδή όταν θα τρέχεις την εφαρμογή σου θα φτιάχνεις ένα διάγραμμα με linewidth 2 και μετά ένα με 3; Αν ναι, τότε καλά το έκανες. Αν όχι τότε τζάμπα περιπλέκεις τα πράγματα. Και για να είναι ξεκάθαρο, σύμφωνα με την εμπειρία μου, το σετάρισμα του matplotlib στην πλειοψηφία των περιτπώσεων πρέπει να γίνεται μία φορά στην αρχή και τέλος. Πειραματίζεσαι δηλαδή για να δεις ποια settings σου αρέσουν, βάζεις το matplotlib να τα χρησιμοποιεί με το που ξεκινάς την εφαρμογή σου και δεν ξαναασχολείσαι. Δεν κάνουμε ακριβώς το ίδιο. Στη συγκεκριμένη περίπτωση κάνεις hard code κάποια settings για ένα συγκεκριμένο figure (το figure σου μάλιστα έχει μόνο μία γραμμή). Αυτό που πρότεινα είναι λίγο πιο γενικό. Σκέψου πχ να έχεις να κάνεις N plots το οποίο θα έχει πχ 4 γραμμές το καθένα. Με τον τρόπο που προτείνω οι αντίστοιχες γραμμές και των Ν plots θα έχουν τα ίδια ακριβώς settings (πχ η πρώτη γραμμή όλων των figures θα είναι blue, με dash [5-5], η δεύτερη γραμμή red με dash [5, 3, 1, 3] κτλ). Για το πρώτο επειδή θα μπει σε παρουσίαση, διπλωματική κλπ έχει νόημα να μπορεί εύκολα να διαμορφωθεί διαφορετικά (όχι oτi δεν γίνεται όπως λες, αλλά μια και το έκανα αν είναι γενικά σωστό λέω να το αφήσω). Για το δεύτερο, αν δεις στο πρώτο graph (cpu) τυπώνω 2 γραφικές με διαφορετικά χρώματα και markers στο ίδιο figure.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα