ó
¦s§]c           @   s=   d  d l  Z d „  Z d „  Z d „  Z d „  Z d „  Z d S(   iÿÿÿÿNc         C   s€  |  j  ƒ  } | j  ƒ  } g  | D] } | | k r | ^ q } g  } g  } xJ | D]B } | j |  j | |  j j ƒ | j | j | | j j ƒ qP Wt j | ƒ } t j | ƒ } | j d } t j | d d ƒ}	 t j | d d ƒ}
 | t j	 |	 | d f ƒ } | t j	 |
 | d f ƒ } t j
 | ƒ | } t j j | ƒ \ } } } | j | j } | |	 j |
 j } | | f S(   sq   Recovers transformation needed to align structure1 with structure2. Modified from http://nghiaho.com/?page_id=671i    t   axisi   (   t   nonzero_abs_indicest   appendt   pointst   offsett   post   npt   matt   shapet   meant   tilet	   transposet   linalgt   svdt   T(   t
   structure1t
   structure2t   abs_indices1t   abs_indices2t   numt   intersectiont   at   bt   nt
   centroid_at
   centroid_bt   aat   bbt   ht   ut   st   vtt   rt   t(    (    sq   /oak/stanford/groups/akundaje/marinovg/Symbiodinium/2019-09-27-figures/multi_mds/miniMDS-master/linear_algebra.pyt   getTransformation   s(    %"c         C   sD   |  d | d d |  d | d d |  d | d d d d S(   s&   Euclidean distance between coordinatesi    i   i   g      ð?(    (   t   coord1t   coord2(    (    sq   /oak/stanford/groups/akundaje/marinovg/Symbiodinium/2019-09-27-figures/multi_mds/miniMDS-master/linear_algebra.pyt   calcDistance&   s    c         C   s`   t  j |  j ƒ  ƒ } t  j | d d ƒ} t g  | D] } t | | ƒ ^ q4 ƒ } | t | ƒ S(   NR    i    (   R   t   arrayt	   getCoordsR	   t   sumR%   t   len(   t	   structuret   coordst   centroidt   coordt   dist_sum(    (    sq   /oak/stanford/groups/akundaje/marinovg/Symbiodinium/2019-09-27-figures/multi_mds/miniMDS-master/linear_algebra.pyt   radius_of_gyration*   s    (c         C   s   t  |  ƒ } t j | ƒ t j | | f ƒ | } | j |  d ƒ j | ƒ d } t j j | ƒ \ } } t j | ƒ d d d … } | | } | d d … | f } t j | d d … d f | d d d | d d … d f | d d d | d d … d f | d d d g ƒ j	 S(   sD   Modified from http://www.nervouscomputer.com/hfs/cmdscale-in-python/i   Niÿÿÿÿi    g      ð?i   (
   R)   R   t   eyet   onest   dotR   t   eight   argsortR&   R   (   t   distMatR   R   R   t   evalst   evecst   idx(    (    sq   /oak/stanford/groups/akundaje/marinovg/Symbiodinium/2019-09-27-figures/multi_mds/miniMDS-master/linear_algebra.pyt   cmds0   s    &!
c         C   s´  d d d g } t  |  | ƒ } |  | } d d d g } d d d g } d d d g } t j t j | | ƒ ƒ } t j | | ƒ }	 t  |	 | ƒ }
 |	 |
 } t j | d ƒ } t j | d ƒ | d } t j | d ƒ | d } t j | d ƒ | d } t j | d | d | d | d d | | | | d | | | | g d | | | | | d | d | d | d d | | | | g d | | | | d | | | | | d | d | d | d g g ƒ } t j | ƒ j ƒ  } t j | ƒ j ƒ  } t j | ƒ j ƒ  } | | } | | } | | } t j	 | ƒ } x[ t
 t | ƒ ƒ D]G } | | } t j | | ƒ t j | | ƒ t j | | ƒ g | | <qeW| S(   s5   Rotate 3-D coords such that vector n aligns to z-axisi    i   i   (   R%   R   t   arccosR2   t   crosst   cost   sint   matrixR   t
   zeros_liket   rangeR)   (   R   R+   t   origint   len_nt   n_hatt   i_hatt   j_hatt   k_hatt   thetaR   t   len_bt   b_hatt   q0t   q1t   q2t   q3t   Qt   u_hatt   v_hatt   w_hatt
   new_coordst   it   p(    (    sq   /oak/stanford/groups/akundaje/marinovg/Symbiodinium/2019-09-27-figures/multi_mds/miniMDS-master/linear_algebra.pyt   change_coordinate_systemE   s4    

ç



;(   t   numpyR   R"   R%   R/   R9   RU   (    (    (    sq   /oak/stanford/groups/akundaje/marinovg/Symbiodinium/2019-09-27-figures/multi_mds/miniMDS-master/linear_algebra.pyt   <module>   s
   	#			