【发布时间】: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]
实际上,我的数组更长,包含我想通过执行某种转换来压缩或扩展的表面高程。
有人有什么建议吗?
干杯。
【问题讨论】:
我想转换一个数组,使值之间的“间距”增加(或减少)特定量。例如,假设我有 arr 并希望将 new_arr 中每个值之间的间距(差异)增加 0.1:
arr = [10.0, 6.5, 3.0, 1.3]
new_arr = [10.15, 6.55, 2.95, 1.15]
实际上,我的数组更长,包含我想通过执行某种转换来压缩或扩展的表面高程。
有人有什么建议吗?
干杯。
【问题讨论】:
这是否符合您的要求?
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. ])
【讨论】:
你可以的
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])
【讨论】: