Numpy modify array in place?

前端 未结 4 2093
南方客
南方客 2020-11-27 19:09

I have the following code which is attempting to normalize the values of an m x n array (It will be used as input to a neural network, where m is t

4条回答
  •  温柔的废话
    2020-11-27 19:35

    There is a nice way to do in-place normalization when using numpy. np.vectorize is is very usefull when combined with a lambda function when applied to an array. See the example below:

    import numpy as np
    
    def normalizeMe(value,vmin,vmax):
    
        vnorm = float(value-vmin)/float(vmax-vmin)
    
        return vnorm
    
    imin = 0
    imax = 10
    feature = np.random.randint(10, size=10)
    
    # Vectorize your function (only need to do it once)
    temp = np.vectorize(lambda val: normalizeMe(val,imin,imax)) 
    normfeature = temp(np.asarray(feature))
    
    print feature
    print normfeature
    

    One can compare the performance with a generator expression, however there are likely many other ways to do this.

    %%timeit
    temp = np.vectorize(lambda val: normalizeMe(val,imin,imax)) 
    normfeature1 = temp(np.asarray(feature))
    10000 loops, best of 3: 25.1 µs per loop
    
    
    %%timeit
    normfeature2 = [i for i in (normalizeMe(val,imin,imax) for val in feature)]
    100000 loops, best of 3: 9.69 µs per loop
    
    %%timeit
    normalize(np.asarray(feature))
    100000 loops, best of 3: 12.7 µs per loop
    

    So vectorize is definitely not the fastest, but can be conveient in cases where performance is not as important.

提交回复
热议问题