Chỉnh sửa 1: OP đã cập nhật câu hỏi của mình sau khi tôi đã đưa ra câu trả lời đầu tiên. Câu trả lời được cập nhật có thể được tìm thấy bên dưới sau EDIT2.
Không chắc gì chính xác bạn cố gắng làm nhưng trong trường hợp này bạn chỉ có thể làm như sau để có được diff
:
import numpy as np
diff = np.array(array[n-1:]) - np.array(average[:-n+2])
Sau đó diff
sẽ là đầu ra mong muốn:
array([ 2. , 1.5, 10.5, 4. , 1.5, -2. ])
Vì vậy, trước tiên bạn cắt các danh sách của mình bằng cách sử dụng tham số n
, sau đó chuyển đổi danh sách của bạn sang mảng và trừ chúng khỏi nhau. Dòng mã trên thậm chí sẽ đơn giản hơn nếu a) danh sách của bạn có cùng độ dài, b) n
là chỉ mục của bạn chứ không phải phần tử bạn muốn bắt đầu và c) nếu bạn sử dụng mảng có nhiều mảng thay vì danh sách:
import numpy as np
# add one additional value so that the arrays have the same length
myArray = np.array([1, 3, 4, 5, 15, 14, 16, 13, 17])
# choose the starting index rather than the element
n = 2
myAverage = np.array([2, 3.5, 4.5, 10, 14.5, 15, 14.5])
diffAr = myArray[n:] - myAverage
Sau đó diffAr
trông như thế này (một yếu tố hơn trong trường hợp của bạn vì tôi đã thêm một yếu tố để myArray
):
array([ 2. , 1.5, 10.5, 4. , 1.5, -2. , 2.5])
Chỉ cần một nhận xét chung: Xin đừng sử dụng array
và diff
như tên biến.
EDIT2:
Bạn đã thay đổi câu hỏi của mình; đây là một câu trả lời được cập nhật. Điều duy nhất người ta phải thêm vào câu trả lời ở trên là một cách để tính trung bình đang chạy cho kích thước cửa sổ m
. Sau đó, người ta có thể thực hiện chính xác những gì tôi đã làm ở trên:
import numpy as np
def runningMean(ar, m):
return np.convolve(ar, np.ones((m,))/m)[(m-1):]
a = np.array([1, 3, 4, 5, 15, 14, 16, 13])
m = 2
av = runningMean(a, m)
d = a[m:] - av[:-m]
Trong trường hợp này d
chứa các đầu ra mong muốn:
array([ 2. , 1.5, 10.5, 4. , 1.5, -2. ])
@ Cleb Cảm ơn bạn đã trả lời của bạn, tôi nhận ra sau đó là một chút bối rối . Do đó tôi đã thay đổi ví dụ của mình. – Mapa
@Mapa: Tôi đã cập nhật câu trả lời; cho tôi biết nếu điều đó bây giờ trả lời câu hỏi của bạn. – Cleb
Có. Cảm ơn bạn. – Mapa