Skip to main content

Fast multi-threaded raster operations with simple IO

Project description

Faster-Raster

fasterraster is a fast multi-threaded python library for performing raster operations using openMP and numpy objects complete with simple IO.

Motivation


fasterraster was developed to quickly perform raster operations, enabling self-supervised learning for raster based analyses. fasterraster provides a cython wrapper for optimized openMP c code. Data objects are handled by numpy allowing for straightforward memory management. Currently only computation of visual/morphological features have been implemented however this is open to expansion in the future. All code is still in development and thus it is recommended to test fully before use.

Installation


fasterraster has currently been tested on Linux and Microsoft windows operating systems. You will need python>=3.6 installed. It is recommended to install fasterraster within a virtual environment.

Install using pip

To install fasterraster from PyPI using pip:

pip install fasterraster

Install from source

To build fasterraster from source, download this repository and run:

python3 setup.py build_ext --inplace

Note: You will need to have the required build dependencies installed.

Example


import timeit
import numpy as np
import fasterraster as fr
from pathlib import Path

NTESTS = 10

# Load a .bil file containing a DEM
fname = Path('./test_data/dem.bil')
dem = fr.read(fname)

# regular python implementation of hillshade function
# from https://www.neonscience.org/resources/learning-hub/tutorials/create-hillshade-py
def py_hillshade(dem, cell_size, azimuth=330, altitude=30):
    azimuth = 360.0 - azimuth

    dem = dem / cell_size
    x, y = np.gradient(dem)
    slope = np.pi/2. - np.arctan(np.sqrt(x*x + y*y))
    aspect = np.arctan2(-x, y)
    azimuthrad = azimuth*np.pi/180.
    altituderad = altitude*np.pi/180.
 
    shaded = np.sin(altituderad)*np.sin(slope)
    + np.cos(altituderad)*np.cos(slope) * np.cos(
    (azimuthrad - np.pi/2.) - aspect)
    
    return 255*(shaded + 1)/2

# Time hillshade computation using regular python
time = timeit.timeit(lambda: py_hillshade(dem.raster, dem.XDIM), number=NTESTS)
print(f'python hillshade averaged {time/NTESTS:.3f} seconds')

# Time hillshade computation using fasterraster for num-threads
num_threads = [1,2,4,8]
for numt in num_threads:
    time = timeit.timeit(lambda: fr.hillshade_faster_mp(dem.raster, numt), number=NTESTS)
    print(f'hillshade averaged {time/NTESTS:.3f} seconds for {numt} threads')

Example output:

python hillshade averaged 0.525 seconds
hillshade averaged 0.082 seconds for 1 threads
hillshade averaged 0.041 seconds for 2 threads
hillshade averaged 0.030 seconds for 4 threads
hillshade averaged 0.023 seconds for 8 threads

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fasterraster-0.0.1.tar.gz (24.7 kB view details)

Uploaded Source

File details

Details for the file fasterraster-0.0.1.tar.gz.

File metadata

  • Download URL: fasterraster-0.0.1.tar.gz
  • Upload date:
  • Size: 24.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.7

File hashes

Hashes for fasterraster-0.0.1.tar.gz
Algorithm Hash digest
SHA256 c19686ca645ac815de12c1e87ba64fbca636c9aa21479349f6dac47996dd8f40
MD5 f8ffbf06b06d57c9051f6d3f0dc63303
BLAKE2b-256 c44ad7c2796bc9417b7a1277b89bc83ecc32574fcac442e3707dbe736501c0ec

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page