【问题标题】:Increase (or decrease) spacing between values in a numpy array增加(或减少)numpy 数组中值之间的间距
【发布时间】:2022-01-23 18:55:15
【问题描述】:

我想转换一个数组,使值之间的“间距”增加(或减少)特定量。例如,假设我有 arr 并希望将 new_arr 中每个值之间的间距(差异)增加 0.1:

arr = [10.0, 6.5, 3.0, 1.3]

new_arr = [10.15, 6.55, 2.95, 1.15]

实际上,我的数组更长,包含我想通过执行某种转换来压缩或扩展的表面高程。

有人有什么建议吗?

干杯。

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    这是否符合您的要求?

    import numpy as np
    
    delta = 0.1
    arr = np.array( [10., 6.5, 3, 1.3 ])
    
    diff = np.diff( arr, prepend = 0. )
    diff
    # array([10. , -3.5, -3.5, -1.7])
    
    diff[ 1:] += np.sign( diff[1:] ) * delta  # Add or subtract the delta
    diff
    # array([10. , -3.6, -3.6, -1.8])
    
    new_arr = diff.cumsum()
    new_arr
    # array([10. ,  6.4,  2.8,  1. ])
    
    new_arr += arr.mean() - new_arr.mean() 
    # Make the mean of new_array the same as that of arr
    
    new_arr
    # array([10.15,  6.55,  2.95,  1.15])
    

    这可以封装在一个函数中:

    def expand_diff( arr, delta ):
        diff = np.diff( arr, prepend = 0.0 )
        diff[1:] += np.sign( diff[1:] ) * delta
        new_arr = diff.cumsum()
        return new_arr + arr.mean() - new_arr.mean()
    
    arr = np.array( [10., 6.5, 3, 1.3 ])
    expand_diff( arr, .1 )
    # array([10.15,  6.55,  2.95,  1.15])
    
    # Without consistent decreasing/increasing
    expand_diff( np.array( [ 10.5, 6., 9., 4., 3.1 ] ), .1 )
    # array([10.58,  5.98,  9.08,  3.98,  2.98])
    
    np.diff( np.array( [ 10.5, 6., 9., 4., 3.1 ] ) )
    # array([-4.5,  3. , -5. , -0.9])
    
    np.diff(expand_diff( np.array( [ 10.5, 6., 9., 4., 3.1 ] ), .1 ))
    # array([-4.6,  3.1, -5.1, -1. ])
    

    【讨论】:

    • 好的,谢谢! :)
    【解决方案2】:

    你可以的

    import numpy as np
    
    arr = np.array([10.0,6.5,3.0,1.3])
    stretch = 0.1
    
    d = np.arange(-len(arr),0,-1) * stretch
    d = d - np.mean(d)
    
    arr += d
    
    # arr = np.array([10.15,6.55,2.95,1.15])
    

    【讨论】:

      猜你喜欢
      • 2021-11-09
      • 2019-03-12
      • 1970-01-01
      • 2021-11-27
      • 2019-11-08
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多