Advertisement
dopplershift

Generators

Nov 15th, 2016
272
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.29 KB | None | 0 0
  1. # Here's the raw version:
  2. def continuous(data_dict, fname, chunk_size=None):
  3.     # Create netCDF4 dataset
  4.     ds = Dataset(fname, 'w')
  5.     create_variables(ds)
  6.  
  7.     # Figure out how to chunk
  8.     num_points = list(data_dict.values())[0].size
  9.     if chunk_size is None:
  10.         chunk_size = num_points
  11.     num_chunks = (num_points + chunk_size - 1) // chunk_size
  12.  
  13.     for i in range(num_chunks):
  14.         chunk_slice = slice(i * chunk_size, min((i + 1) * chunk_size, num_points))
  15.         for name in ('lon', 'lat', 'temperature'):
  16.             ds.variables[name][chunk_slice] = data_dict[name][chunk_slice]
  17.  
  18. #
  19. # Imagine multiple functions needing that chunking logic
  20. #
  21.  
  22. # Instead, can factor out common loop setup and iteration
  23. def chunker(data_dict, chunk_size):
  24.     num_points = list(data_dict.values())[0].size
  25.     if chunk_size is None:
  26.         chunk_size = num_points
  27.     num_chunks = (num_points + chunk_size - 1) // chunk_size
  28.  
  29.     for i in range(num_chunks):
  30.         yield slice(i * chunk_size, min((i + 1) * chunk_size, num_points))
  31.  
  32. def continuous(data_dict, fname, chunk_size=None):
  33.     # Create netCDF4 dataset
  34.     ds = Dataset(fname, 'w')
  35.     create_variables(ds)
  36.  
  37.     for chunk in chunker(data_dict, chunk_size):
  38.         for name in ('lon', 'lat', 'temperature'):
  39.             ds.variables[name][chunk] = data_dict[name][chunk]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement