class_docstr: !
  @brief Observer of EM algorithm for collecting algorithm state on each step.
  @details It can be used to obtain whole picture about clustering process of EM algorithm. Allocated clusters,
            means and covariances are stored in observer on each step. Here an example of usage:
  
  @code
      from pyclustering.cluster.ema import ema, ema_observer
      from pyclustering.utils import read_sample
      from pyclustering.samples.definitions import SIMPLE_SAMPLES
  
      # Read data from text file.
      sample = read_sample(SIMPLE_SAMPLES.SAMPLE_SIMPLE3)
  
      # Create EM observer.
      observer = ema_observer()
  
      # Create EM algorithm to allocated four clusters and pass observer to it.
      ema_instance = ema(sample, 4, observer=observer)
  
      # Run clustering process.
      ema_instance.process()
  
      # Print amount of steps that were done by the algorithm.
      print("EMA steps:", observer.get_iterations())
  
      # Print evolution of means and covariances.
      print("Means evolution:", observer.get_evolution_means())
      print("Covariances evolution:", observer.get_evolution_covariances())
  
      # Print evolution of clusters.
      print("Clusters evolution:", observer.get_evolution_clusters())
  
      # Print final clusters.
      print("Allocated clusters:", observer.get_evolution_clusters()[-1])
  @endcode
docstr: !
  @return (list) Mean of each cluster on each step of clustering.
docstr_tok: ["!","@","return","(","list",")","Mean","of","each","cluster","on","each","step","of","clustering","."]
code: def get_evolution_means(self):
      """!
      @return (list) Mean of each cluster on each step of clustering.
  
      """
      return self.__means_evolution
  
imports: import numpy
  import random
  from pyclustering.cluster import cluster_visualizer
  from pyclustering.cluster.center_initializer import kmeans_plusplus_initializer
  from pyclustering.cluster.kmeans import kmeans
  from pyclustering.utils import pi, calculate_ellipse_description, euclidean_distance_square
  from enum import IntEnum
  import matplotlib.pyplot
  import matplotlib.animation
  from matplotlib import patches
label_desc: Use image node_id 4 for calling the ema_observer obj's underlying member method code with example usage: obj.get_evolution_means() and returns: self