How to "scale" a numpy array? How to "scale" a numpy array? python python

How to "scale" a numpy array?


You should use the Kronecker product, numpy.kron:

Computes the Kronecker product, a composite array made of blocks of the second array scaled by the first

import numpy as npa = np.array([[1, 1],              [0, 1]])n = 2np.kron(a, np.ones((n,n)))

which gives what you want:

array([[1, 1, 1, 1],       [1, 1, 1, 1],       [0, 0, 1, 1],       [0, 0, 1, 1]])


You could use repeat:

In [6]: a.repeat(2,axis=0).repeat(2,axis=1)Out[6]: array([[1, 1, 1, 1],       [1, 1, 1, 1],       [0, 0, 1, 1],       [0, 0, 1, 1]])

I am not sure if there's a neat way to combine the two operations into one.


scipy.misc.imresize can scale images. It can be used to scale numpy arrays, too:

#!/usr/bin/env pythonimport numpy as npimport scipy.miscdef scale_array(x, new_size):    min_el = np.min(x)    max_el = np.max(x)    y = scipy.misc.imresize(x, new_size, mode='L', interp='nearest')    y = y / 255 * (max_el - min_el) + min_el    return yx = np.array([[1, 1],              [0, 1]])n = 2new_size = n * np.array(x.shape)y = scale_array(x, new_size)print(y)