Advertisement
homer512

multidim reduction

Sep 29th, 2015
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.91 KB | None | 0 0
  1. #!/usr/bin/python2
  2.  
  3.  
  4. import itertools
  5.  
  6. import numpy
  7.  
  8.  
  9. def reduce(dataset):
  10.     """Stand-in for the real function"""
  11.     return dataset.sum()
  12.  
  13.  
  14. def causal_graph(array):
  15.     reduction = 2 # remaining dimensions
  16.     ndim = array.ndim
  17.     assert(ndim > reduction)
  18.     allaxes = xrange(ndim)
  19.     combinations = itertools.combinations
  20.     axessets = combinations(allaxes, ndim - reduction)
  21.     destinations = reversed(list(combinations(allaxes, reduction)))
  22.     arraysum = array.sum
  23.     datasets = (arraysum(axes) for axes in axessets)
  24.     result = numpy.zeros((ndim, ) * reduction)
  25.     # fill upper triangular with values
  26.     for destination, dataset in itertools.izip(destinations, datasets):
  27.         result[destination] = reduce(dataset)
  28.     # copy upper triangular to lower triangular. Diagonal stays 0
  29.     result[numpy.tril_indices(ndim, -1)] = result[numpy.triu_indices(ndim, 1)]
  30.     return result
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement