给定数组
B = array([1, 1, 2, 3, 3])
字符串我希望能够使用内核[1.0,-5.0,1.0]对前3个数字求和,然后取平均值。(1(1.0)-5(2)+1(2))/3.0 = -0.67等。第一个和最后一个元素保留,但用于相乘。结果将是这样的:
result = np.array([1.0, -0.67, -2.0, -3.33, 3.0]).
型我想要一个没有循环的有效方法。谢谢
zaqlnxep1#
您可以使用卷积(np.convolve)并除以内核的长度来获得中间元素:
np.convolve
B = np.array([1, 1, 2, 3, 3]) kernel = np.array([1.0, -5.0, 1.0]) tmp = np.convolve(B, kernel[::-1], mode='valid')/len(kernel)
字符串
或者使用sliding_window_view:
sliding_window_view
from numpy.lib.stride_tricks import sliding_window_view as swv tmp = (swv(B, len(kernel))*kernel).mean(axis=1)
型输出量:
array([-0.66666667, -2. , -3.33333333])
型然后连接第一个和最后一个元素,或者替换数组副本中的中间部分。
result = B.copy().astype(float) start = len(kernel)//2 result[start:start+len(kernel)] = tmp
array([ 1. , -0.66666667, -2. , -3.33333333, 3. ])
型
1条答案
按热度按时间zaqlnxep1#
您可以使用卷积(
np.convolve
)并除以内核的长度来获得中间元素:字符串
或者使用
sliding_window_view
:型
输出量:
型
然后连接第一个和最后一个元素,或者替换数组副本中的中间部分。
型
输出量:
型