def pairwise_vector_distances(vectors, save_file=False, normalize=False): """ Compare every pair of equal-sized vectors. Parameters ---------- vectors : array of 1-D lists or arrays of integers or floats save_file : bool save file? normalize : bool normalize each element of the vectors? Returns ------- vector_distances : numpy array of integers or floats distances between each pair of vectors outfile : string [optional] output filename for pairwise_vector_distances Examples -------- >>> import numpy as np >>> from mindboggle.guts.compute import pairwise_vector_distances >>> vectors = [[1,2,3],[0,3,5],[0,3.5,5],[1,1,1]] >>> save_file = False >>> normalize = False >>> vector_distances, outfile = pairwise_vector_distances(vectors, ... save_file, normalize) >>> print(np.array_str(np.array(vector_distances), ... precision=5, suppress_small=True)) [[ 0. 0.8165 0.89753 0.74536] [ 0. 0. 0.16667 1.52753] [ 0. 0. 0. 1.60728] [ 0. 0. 0. 0. ]] """ import os import numpy as np from mindboggle.guts.compute import vector_distance # Make sure argument is a numpy array if not isinstance(vectors, np.ndarray): vectors = np.array(vectors) # Initialize output vector_distances = np.zeros((len(vectors), len(vectors))) #--------------------------------------------------------------------------- # Compute distance between each pair of vectors #--------------------------------------------------------------------------- # Loop through every pair of vectors for ihist1 in range(len(vectors)): for ihist2 in range(len(vectors)): if ihist2 >= ihist1: # Store pairwise distances between histogram values d = vector_distance(1.0*vectors[ihist1], 1.0*vectors[ihist2], normalize=normalize) vector_distances[ihist1, ihist2] = d if save_file: outfile = os.path.join(os.getcwd(), 'vector_distances.txt') np.savetxt(outfile, vector_distances, fmt=len(vectors) * '%.4f ', delimiter='\t', newline='\n') if not os.path.exists(outfile): raise IOError(outfile + " not found") else: outfile = '' return vector_distances, outfile
def pairwise_vector_distances(vectors, save_file=False, normalize=False): """ Compare every pair of equal-sized vectors. Parameters ---------- vectors : array of 1-D lists or arrays of integers or floats save_file : Boolean save file? normalize : Boolean normalize each element of the vectors? Returns ------- vector_distances : numpy array of integers or floats distances between each pair of vectors outfile : string [optional] output filename for pairwise_vector_distances Examples -------- >>> from mindboggle.guts.compute import pairwise_vector_distances >>> pairwise_vector_distances([[1,2,3],[0,3,5],[0,3.5,5],[1,1,1]]) (array([[ 0. , 0.81649658, 0.89752747, 0.74535599], [ 0. , 0. , 0.16666667, 1.52752523], [ 0. , 0. , 0. , 1.60727513], [ 0. , 0. , 0. , 0. ]]), '') """ import os import numpy as np from mindboggle.guts.compute import vector_distance # Make sure argument is a numpy array if not isinstance(vectors, np.ndarray): vectors = np.array(vectors) # Initialize output vector_distances = np.zeros((len(vectors), len(vectors))) #--------------------------------------------------------------------------- # Compute distance between each pair of vectors #--------------------------------------------------------------------------- # Loop through every pair of vectors for ihist1 in range(len(vectors)): for ihist2 in range(len(vectors)): if ihist2 >= ihist1: # Store pairwise distances between histogram values d = vector_distance(1.0 * vectors[ihist1], 1.0 * vectors[ihist2], normalize=normalize) vector_distances[ihist1, ihist2] = d if save_file: outfile = os.path.join(os.getcwd(), 'vector_distances.txt') np.savetxt(outfile, vector_distances, fmt=len(vectors) * '%.4f ', delimiter='\t', newline='\n') if not os.path.exists(outfile): raise (IOError(outfile + " not found")) else: outfile = '' return vector_distances, outfile
def pairwise_vector_distances(vectors, save_file=False, normalize=False): """ Compare every pair of equal-sized vectors. Parameters ---------- vectors : array of 1-D lists or arrays of integers or floats save_file : Boolean save file? normalize : Boolean normalize each element of the vectors? Returns ------- vector_distances : numpy array of integers or floats distances between each pair of vectors outfile : string [optional] output filename for pairwise_vector_distances Examples -------- >>> from mindboggle.guts.compute import pairwise_vector_distances >>> pairwise_vector_distances([[1,2,3],[0,3,5],[0,3.5,5],[1,1,1]]) (array([[ 0. , 0.81649658, 0.89752747, 0.74535599], [ 0. , 0. , 0.16666667, 1.52752523], [ 0. , 0. , 0. , 1.60727513], [ 0. , 0. , 0. , 0. ]]), '') """ import os import numpy as np from mindboggle.guts.compute import vector_distance # Make sure argument is a numpy array if not isinstance(vectors, np.ndarray): vectors = np.array(vectors) # Initialize output vector_distances = np.zeros((len(vectors), len(vectors))) # --------------------------------------------------------------------------- # Compute distance between each pair of vectors # --------------------------------------------------------------------------- # Loop through every pair of vectors for ihist1 in range(len(vectors)): for ihist2 in range(len(vectors)): if ihist2 >= ihist1: # Store pairwise distances between histogram values d = vector_distance(1.0 * vectors[ihist1], 1.0 * vectors[ihist2], normalize=normalize) vector_distances[ihist1, ihist2] = d if save_file: outfile = os.path.join(os.getcwd(), "vector_distances.txt") np.savetxt(outfile, vector_distances, fmt=len(vectors) * "%.4f ", delimiter="\t", newline="\n") if not os.path.exists(outfile): raise (IOError(outfile + " not found")) else: outfile = "" return vector_distances, outfile