This PR implements performance optimizations across the OpenPIV codebase to reduce execution time and memory usage.
openpiv/pyprocess.py- Vectorized array operations, reduced copiesopenpiv/validation.py- Eliminated unnecessary masked array copiesopenpiv/filters.py- Conditional masked array creationopenpiv/test/test_performance.py- New performance validation tests (NEW)PERFORMANCE_IMPROVEMENTS.md- Detailed documentation (NEW)
- Vectorized Operations: Replaced Python loops and list comprehensions with NumPy operations
- Reduced Array Copies: Eliminated unnecessary copy operations, especially with masked arrays
- Conditional Conversions: Only convert dtypes when necessary
- Optimized Border Checking: Use np.maximum/np.minimum instead of array indexing
find_all_first_peaks: Fully vectorized, < 10ms for 100 windowsnormalize_intensity: Conditional conversion, < 50ms for 50 windowsglobal_std: No copies for non-masked input, < 10ms for 100x100 arraysreplace_outliers: Conditional masking, < 100ms for 50x50 arrays
✅ All 198 existing tests pass ✅ 5 new performance tests added ✅ Total: 203 tests pass in ~8 seconds ✅ Tutorial scripts verified working
✅ 100% backward compatible
- Function signatures unchanged
- Return types unchanged
- Numerical results unchanged
See PERFORMANCE_IMPROVEMENTS.md for:
- Detailed before/after code comparisons
- Performance metrics
- Future optimization opportunities
- General optimization principles
These optimizations particularly benefit:
- Large PIV analysis with many interrogation windows
- Iterative refinement algorithms
- High-resolution image processing
- Batch processing workflows