我想轉換一個陣列,以便值之間的“間距”增加(或減少)特定數量。例如,假設我已經得到arr并且想要將每個值之間的間距(差異)增加new_arr0.1:
arr = [10.0, 6.5, 3.0, 1.3]
new_arr = [10.15, 6.55, 2.95, 1.15]
實際上,我的陣列更長,包含我想通過執行某種轉換來壓縮或擴展的表面高程。
有人有建議嗎?
干杯。
uj5u.com熱心網友回復:
這是否符合您的要求?
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. ])
uj5u.com熱心網友回復:
你可以做
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])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/419896.html
標籤:
