How to “scale” a numpy array?

后端 未结 4 2084
天涯浪人
天涯浪人 2020-12-08 07:24

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:

ar         


        
4条回答
  •  渐次进展
    2020-12-08 07:44

    To scale effectively I use following approach. Works 5 times faster than repeat and 10 times faster that kron. First, initialise target array, to fill scaled array in-place. And predefine slices to win few cycles:

    K = 2   # scale factor
    a_x = numpy.zeros((h * K, w *K), dtype = a.dtype)   # upscaled array
    Y = a_x.shape[0]
    X = a_x.shape[1]
    myslices = []
    for y in range(0, K) :
        for x in range(0, K) :
            s = slice(y,Y,K), slice(x,X,K)
            myslices.append(s)
    

    Now this function will do the scale:

    def scale(A, B, slices):        # fill A with B through slices
        for s in slices: A[s] = B
    

    Or the same thing simply in one function:

    def scale(A, B, k):     # fill A with B scaled by k
        Y = A.shape[0]
        X = A.shape[1]
        for y in range(0, k):
            for x in range(0, k):
                A[y:Y:k, x:X:k] = B
    

提交回复
热议问题