Difference between specifying argument and not in NumPy Running these lines in Colab:
import numpy as np
size  = 2**13
%timeit np.random.normal(size=(size, size))
print(&quot;-----------&quot;)
%timeit np.random.normal((size, size))

yields:
1 loop, best of 5: 2.67 s per loop
-----------
The slowest run took 7.05 times longer than the fastest. This could mean that an intermediate result is being cached.
10000 loops, best of 5: 16.3 µs per loop

Why is the difference in computational time between these two lines of code so large? In my mind they should be the same.
This due to the order of optional arguments. Perhaps this example can explain thing for you:
def foo(x = 1, y = 2, z = 3):
    print((x, y, z))

In [1]: foo()
(1, 2, 3)

In [2]: foo(4)
(4, 2, 3)

In [3]: foo(z = 4)
(1, 2, 4)

Now looking at help about np.random.normal, we get:
In [4]: help(np.random.normal)
Help on built-in function normal:

normal(...) method of mtrand.RandomState instance
    normal(loc=0.0, scale=1.0, size=None)

That means that since loc is the first optional argument, np.random.normal((size, size)) is interpreted as np.random.normal(loc = (size, size)) and not as np.random.normal(size = (size, size))