In [1]:
import numpy as np
In [2]:
print("Small size")
a = np.ones(shape=(4, 500))
%timeit -n10000 np.zeros_like(a)
%timeit -n10000 np.zeros(shape=a.shape)
print("Large size")
a = np.ones(shape=(8, 50000))
%timeit -n100 np.zeros_like(a)
%timeit -n100 np.zeros(shape=a.shape)
In [3]:
print("Small size")
a = np.ones(shape=(4, 500))
%timeit -n10000 np.ones_like(a)
%timeit -n10000 np.ones(shape=a.shape)
print("Large size")
a = np.ones(shape=(8, 50000))
%timeit -n100 np.ones_like(a)
%timeit -n100 np.ones(shape=a.shape)
In [4]:
print("Small size")
a = np.ones(shape=(4, 500))
%timeit -n10000 np.full_like(a, 1.1)
%timeit -n10000 np.full(a.shape, 1.1)
print("Large size")
a = np.ones(shape=(8, 50000))
%timeit -n100 np.full_like(a, 1.1)
%timeit -n100 np.full(a.shape, 1.1)
In [5]:
print("Small size")
a = np.empty(shape=(4, 500))
%timeit -n10000 np.empty_like(a)
%timeit -n10000 np.empty(a.shape)
print("Large size")
a = np.ones(shape=(8, 50000))
%timeit -n100 np.empty_like(a)
%timeit -n100 np.empty(a.shape)
In [6]:
print("Small size")
a = np.ones(500)
%timeit -n10000 np.r_[[a], [a], [a], [a]]
%timeit -n10000 np.concatenate(([a], [a], [a], [a]))
%timeit -n10000 np.vstack((a, a, a, a))
%timeit -n10000 np.array([a,a,a,a]) # another approach for this case
%timeit -n10000 np.array([a, a, a, a]).reshape((-1, a.shape[-1]))
assert np.allclose(np.r_[[a], [a], [a], [a]], np.concatenate(([a], [a], [a], [a])))
assert np.allclose(np.r_[[a], [a], [a], [a]], np.vstack((a, a, a, a)))
assert np.allclose(np.r_[[a], [a], [a], [a]], np.array([a,a,a,a]))
assert np.allclose(np.r_[[a], [a], [a], [a]], np.array([a, a, a, a]).reshape((-1, a.shape[-1])))
print("\nLarge size")
a = np.random.rand(8, 50000)
%timeit -n100 np.r_[a, a, a, a]
%timeit -n100 np.concatenate((a, a, a, a))
%timeit -n100 np.vstack((a, a, a, a))
%timeit -n100 np.array([a, a, a, a]).reshape((-1, a.shape[1]))
assert np.allclose(np.r_[a, a, a, a], np.concatenate((a, a, a, a)))
assert np.allclose(np.r_[a, a, a, a], np.vstack((a, a, a, a)))
assert np.allclose(np.r_[a, a, a, a], np.array([a, a, a, a]).reshape((-1, a.shape[1])))
In [7]:
print("Small size")
U = np.ones(shape=(2, 400))
%timeit -n10000 np.c_[U[:, 0], U]
%timeit -n10000 np.hstack((U[:, 0, np.newaxis], U))
%timeit -n10000 Unew = np.empty(shape=(U.shape[0], U.shape[1] + 1)); Unew[:, 0] = U[:, 0]; Unew[:, 1:] = U;
assert np.allclose(np.c_[U[:, 0], U], np.hstack((U[:, 0, np.newaxis], U)))
Unew = np.empty(shape=(U.shape[0], U.shape[1] + 1)); Unew[:, 0] = U[:, 0]; Unew[:, 1:] = U;
assert np.allclose(np.c_[U[:, 0], U], Unew)
print("\nLarge size")
U = np.ones(shape=(3, 400000))
%timeit -n100 np.c_[U[:, 0], U]
%timeit -n100 np.hstack((U[:, 0, np.newaxis], U))
%timeit -n100 Unew = np.empty(shape=(U.shape[0], U.shape[1] + 1)); Unew[:, 0] = U[:, 0]; Unew[:, 1:] = U;
assert np.allclose(np.c_[U[:, 0], U], np.hstack((U[:, 0, np.newaxis], U)))
Unew = np.empty(shape=(U.shape[0], U.shape[1] + 1)); Unew[:, 0] = U[:, 0]; Unew[:, 1:] = U;
assert np.allclose(np.c_[U[:, 0], U], Unew)
In [8]:
print("Small size")
U = np.ones(shape=(4, 200))
%timeit -n10000 np.diff(U, axis=-1)
%timeit -n10000 U[..., 1:] - U[..., :-1]
assert np.allclose(np.diff(U, axis=-1), U[..., 1:] - U[..., :-1])
print("Large size")
U = np.ones(shape=(20, 10000))
%timeit -n100 np.diff(U, axis=-1)
%timeit -n100 U[..., 1:] - U[..., :-1]
assert np.allclose(np.diff(U, axis=-1), U[..., 1:] - U[..., :-1])
In [9]:
a = np.arange(5000)
%timeit -n1000 a.copy()
%timeit -n1000 np.array(a)
%timeit -n1000 np.r_[a]
%timeit -n1000 anew = np.empty_like(a); anew[:] = a[:];