https://nsworldinfo.medium.com/numpy-complete-series-part-4-advanced-numerical-computing-techniques-2ae4cda16fec