Reputation: 53
Suppose the following numpy array:
arr = np.array([0, 1, 2, 3, 4]) # can be any array
I want to know the fastest way to generate the following operation:
n = arr.shape[0]
result = np.tile(arr, (n, 1)) - arr.reshape((-1, 1))
print(result):
array([[ 0, 1, 2, 3, 4],
[-1, 0, 1, 2, 3],
[-2, -1, 0, 1, 2],
[-3, -2, -1, 0, 1],
[-4, -3, -2, -1, 0]])
(1) How to efficiently create matrix "result" (because n >> 0 can be very large) ?
(2) Does this matrix have a particular name ?
Upvotes: 3
Views: 833
Reputation: 42143
This is a bit faster:
result = arr-arr[:,None]
cursory benchmarks, nothing scientific. (timeit 100 times with arr):
5 items (arr) 100 times 10,000 items (np.arange) once
OP: 0.0006383560000000066 0.7902513520000001
This one: 0.0001735200000000381 0.3640661519999999
Kelly's: 0.00027326299999996806 0.36036748900000015 (see comments)
Upvotes: 6