# Julia motivation: why weren't Numpy, Scipy, Numba, good enough?

**URL:** https://discourse.julialang.org/t/julia-motivation-why-werent-numpy-scipy-numba-good-enough/2236
**Category:** Community
**Tags:** history
**Created:** [February 22, 2017, 3:34pm UTC](https://discourse.julialang.org/t/julia-motivation-why-werent-numpy-scipy-numba-good-enough/2236 "2017-02-22T15:34:33Z")
**Posts on this page:** 1
**Showing post:** 29

<div class="post-metadata">

### Author: ![tim.holy](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tim.holy/32/52_2.png) [@tim.holy](https://discourse.julialang.org/u/tim.holy)
#### Post date: [February 24, 2017, 1:48pm UTC](https://discourse.julialang.org/t/julia-motivation-why-werent-numpy-scipy-numba-good-enough/2236/29 "2017-02-24T13:48:21Z")

</div>

I’ve noticed this too, and I think it’s a concern and an important problem. The most optimistic scenario I’ve come up with is that these kinds of optimizations are perhaps best incorporated into user-level julia code via a set of sophisticated iterators. For example, in ImageFiltering I’ve been able to achieve [some of the same kinds of “fusion” as Halide](https://github.com/JuliaImages/ImageFiltering.jl/blob/a643d7f8efc3f57b43e8bb91ecabbb14e2220113/src/imfilter.jl#L369-L389) with surprisingly few lines of code. The core element of this approach is itself a small package, [TiledIteration](https://github.com/JuliaArrays/TiledIteration.jl), which I think does constitute a reusable nugget of ideas for moving forward in this problem space.

From the standpoint of implementing this kind of thing more broadly and for “micro” scale computations, a crucial optimization will be the whole stack vs heap for `struct`s that contain “pointers” to heap-allocated memory: these iterators need to create a crazy number of wrappers for operations working on small chunks of arrays.

---

_[View the full topic](https://discourse.julialang.org/t/julia-motivation-why-werent-numpy-scipy-numba-good-enough/2236)._
