我有一個浮點陣列。 (如果它不存在)是一個函數,它給出了給定數組中每個x點的平均值的新函數,如子採樣(和插值(?)的反函數) )。numpy陣列的子採樣/平均
E.g. sub_sample(numpy.array([1,2,3,4,5,6]),2)給出[1.5,3.5,5.5]
例如,可以去除剩餘物,例如sub_sample(numpy.array([1,2,3,4,5]),2)給出[1.5,3.5]
在此先感謝。
我有一個浮點陣列。 (如果它不存在)是一個函數,它給出了給定數組中每個x點的平均值的新函數,如子採樣(和插值(?)的反函數) )。numpy陣列的子採樣/平均
E.g. sub_sample(numpy.array([1,2,3,4,5,6]),2)給出[1.5,3.5,5.5]
例如,可以去除剩餘物,例如sub_sample(numpy.array([1,2,3,4,5]),2)給出[1.5,3.5]
在此先感謝。
使用NumPy的程序,你可以嘗試像
import numpy
x = numpy.array([1, 2, 3, 4, 5, 6])
numpy.mean(x.reshape(-1, 2), 1) # Prints array([ 1.5, 3.5, 5.5])
,只是與項目數代替2
在reshape
通話要平均值。
編輯:這假設n
分爲x
的長度。如果你打算把它變成一個普通的功能,你需要包含一些檢查。也許是這樣的:
def average(arr, n):
end = n * int(len(arr)/n)
return numpy.mean(arr[:end].reshape(-1, n), 1)
此功能在行動:
>>> x = numpy.array([1, 2, 3, 4, 5, 6])
>>> average(x, 2)
array([ 1.5, 3.5, 5.5])
>>> x = numpy.array([1, 2, 3, 4, 5, 6, 7])
>>> average(x, 2)
array([ 1.5, 3.5, 5.5])
def subsample(data, sample_size):
samples = list(zip(*[iter(data)]*sample_size)) # use 3 for triplets, etc.
return map(lambda x:sum(x)/float(len(x)), samples)
l = [1, 2, 3, 4, 5, 6]
print subsample(l, 2)
print subsample(l, 3)
print subsample(l, 5)
給出:
[1.5, 3.5, 5.5]
[2.0, 5.0]
[3.0]
謝謝你,我會嘗試,但我希望能有一個numpy的功能,因爲他們往往是快約10倍,最相似的Python函數。 –
這也應該工作一個在線解決方案:
downsampled_a = [a[i:n+i].mean() for i in range(0,size(a),n)]
「一」與向量的數據和「n」是您的採樣步驟。
PS:from numpy import *
根據OP的要求,它返回'[1.5,3.5,5.0]' - 而不是'[1.5,3.5]'。另外使用'np.size()'而不是從'numpy'中導入所有。 –
這個工作正常,除非窗口大小(上面例子中的2)不是數組長度的乘法,但我可以確保這是。謝謝! –
@MichelKeijzers只要想一想,看看我的編輯。 – Chris
謝謝...是的,這正是我也在想的。 –