Say that I have an array: arr = np.arange(4).reshape(2,2)  The array arr contains the elements array([[0, 1], [2, 3]])  I want to increase the resolution of the array in such a way that the following is achieved: np.array([0,0,1,1], [0,0,1,1], [2,2,3,3], [2,2,3,3]])  what is this operation called? Nearest-neighbor interpolation? It is possible to get my desired output with the following np.concat(np.repeat(arr,4).reshape(-1,2,2,2), axis=-1).reshape(4,4)  Is there a more general way of doing this for any kind of matrix?
You're looking for "nearest-neighbour upsampling", instead of "interpolation". A concise and efficient way to do this in numpy: import numpy as np arr = np.arange(6).reshape(2, 3) upsampled = np.repeat(np.repeat(arr, 2, axis=0), 2, axis=1) print("Original Array:") print(arr) print("Upsampled Array:") print(upsampled)  Note: I changed your sample data to (2,3) to show that the original shape does not affect the function. Result: Original Array: [[0 1 2] [3 4 5]] Upsampled Array: [[0 0 1 1 2 2] [0 0 1 1 2 2] [3 3 4 4 5 5] [3 3 4 4 5 5]]  If you need it to be more memory efficient, you can also use: upsampled2 = np.kron(arr, np.ones((2, 2), dtype=int)) print("Upsampled Array using Kronecker product:") print(upsampled2)  Result: Upsampled Array using Kronecker product: [[0 0 1 1 2 2] [0 0 1 1 2 2] [3 3 4 4 5 5] [3 3 4 4 5 5]]  Libraries like scipy may offer even more efficient methods of doing the same, if your data is very large.