Additional performance changes
Additional performance changes

Revert use of np.einsum back to straight matmul (via `@` operator)

Use temporary stores to avoid memory allocation

Replaced 2D arrays in places where 1D arrays will do (avoids unnecessary `reshape()` and memory use)
SALib/SALib