This idea looks interesting, but I think that having a pipeline method like `Sequential in PyTorch` would be more intuitive than this approach.
Hello Numpy community,
I'm proposing the introduction of a `pipe` method for NumPy arrays to enhance their usability and expressiveness.
Similar to other data processing libraries like pandas, a `pipe` method would allow users to chain operations together in a more readable and intuitive manner.
Consider the following examples where method chaining with `pipe` can improve code readability compared to traditional NumPy code:
# ********************************************************************
# Class PipeableArray just for illustration
import numpy as np
class PipeableArray:
def __init__(self, array: np.ndarray):
self.array = array
def pipe(self, func, *args, **kwargs):
"""Apply function and return the result wrapped in PipeableArray."""
try:
result = func(self.array, *args, **kwargs)
return PipeableArray(result)
except Exception as exc:
print('Ups, something went wrong...')
def __repr__(self):
return repr(self.array)
# ********************************************************************
# Original code using traditional NumPy chaining
arr = np.array([1, 2, 3, 4, 5])
arr = np.square(arr)
arr = np.log(arr)
arr = np.cumsum(arr)
# Original code using traditional NumPy nested functions
arr = np.arange(1., 5.)
result = np.cumsum(np.log(np.square(arr)))
# ********************************************************************
# Proposed Numpy method chaining using a new pipe method
arr = PipeableArray(np.arange(1., 5.))
result = (arr
.pipe(np.square)
.pipe(np.log)
.pipe(np.cumsum)
)
# ********************************************************************
Benefits:
- Readability: Method chaining with pipe offers a more readable and intuitive way to express complex data transformations, making the intended data processing pipeline easier to understand.
- Customization: The pipe method allows users to chain custom functions or already implemented NumPy operations seamlessly.
- Modularity: Users can define reusable functions and chain them together using pipe, leading to cleaner and more maintainable code.
- Consistency: Introducing a pipe method in NumPy aligns with similar functionality available in other libraries like pandas, polars, etc.
- Optimization: While NumPy may not currently optimize chained expressions, the introduction of pipe lays the groundwork for potential future optimizations with lazy evaluation.
I believe this enhancement could benefit the NumPy community by providing a more flexible and expressive way to work with arrays.
I'd love to see such a feature in Numpy and like to hear your thoughts on this proposal.
Best regards,
Oyibo
_______________________________________________
NumPy-Discussion mailing list -- numpy-discussion@python.org
To unsubscribe send an email to numpy-discussion-leave@python.org
https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
Member address: rakshitsingh421@gmail.com