I have a better way to solve exercise 12
I think
rng = np.random.default_rng()
x = rng.random((3, 3, 3))
would be better than
https://github.com/rougier/numpy-100/blob/916e1ecf9544719b49ece6fc135b089988b33058/100_Numpy_exercises_with_hints_with_solutions.md#L96
because the documentation says "[RandomState] should only be used if it is essential to have randoms that are identical to what would have been produced by previous versions of NumPy.".
Similarly, the documentation for numpy.random.uniform says random.Generator.uniform "should be used for new code". And a similar thing for the documentation for numpy.random.randint, numpy.random.normal and numpy.random.choice.
@rougier I assume you don't want me to open an issue and PR for every exercise we could change (since there'd be dozens of issues and dozens of PRs), so I'm happy to make all the changes in one PR.
One PR per issue is better actually and in this case, I prefer to keep the code identical to "what would have been produced by previous versions of NumPy" because it is important for reproducibility. You could make a PR and keeping both the "deprecated" version and the now recommended one.
Have a look at https://www.frontiersin.org/journals/neuroinformatics/articles/10.3389/fninf.2017.00069/full to read my concern.