Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to "scale" a numpy array?

I would like to scale an array of shape (h, w) by a factor of n, resulting in an array of shape (h*n, w*n), with the.

Say that I have a 2x2 array:

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

I would like to scale the array to become 4x4:

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

That is, the value of each cell in the original array is copied into 4 corresponding cells in the resulting array. Assuming arbitrary array size and scaling factor, what's the most efficient way to do this?

like image 487
David Eyk Avatar asked Sep 23 '11 06:09

David Eyk


People also ask

How do I resize an array in NumPy?

NumPy: resize() functionThe resize() function is used to create a new array with the specified shape. If the new array is larger than the original array, then the new array is filled with repeated copies of a. Array to be resized.


1 Answers

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 np a = np.array([[1, 1],               [0, 1]]) n = 2 np.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]]) 
like image 130
Andrew Jaffe Avatar answered Sep 20 '22 01:09

Andrew Jaffe