我有一个包含速度信息的向量x
,索引代表时间。现在我想创建一个新的向量,保留它的大小,但值被替换为时间间隔的平均值,例如:
x =
101
102
103
104
105
106
107
108
109
110
111
112
如果我想将时间间隔设为4,则输出应如下所示:
o =
102.5
102.5
102.5
102.5
106.5
106.5
106.5
106.5
110.5
110.5
110.5
110.5
有没有这样做的功能?感谢
答案 0 :(得分:1)
这是一种方法,它不要求你的时间向量是区间长度的精确倍数,它将accumarray
与一些聪明的索引结合起来。
x = [101
102
103
104
105
106
107
108
109
110
111
112];
intervalLength = 4;
%# create index array
%# for array of length 10,
%# intervalLength 4, this gives
%# [1 1 1 1 2 2 2 2 3 3]'
idx = zeros(length(x),1);
idx(1:intervalLength:end) = 1;
idx = cumsum(idx);
%# average time
avg = accumarray(idx,x,[],@mean);
%# create output array - use index to replicate values
out = avg(idx);
out =
102.5
102.5
102.5
102.5
106.5
106.5
106.5
106.5
110.5
110.5
110.5
110.5
答案 1 :(得分:0)
您似乎尝试在输入数据集中执行步进平均值,同时保留初始输入向量的长度。据我所知,没有一个功能可以做到这一点。
但是,你可以很容易地在Python中完成它。例如:
def blurryAverage(inputCollection, step=1):
""" Perform a tiling average of an input data set according to its
step length, preserving the length of the initial input vector """
# Preconditions
if (len(inputCollection) % step != 0):
raise ValueError('Input data must be of divisible length')
ret = []
for i in range(len(inputCollection) / step):
tot = 0.0
for j in range(step):
tot += inputCollection[(i*step)+j]
for j in range(step):
ret.append(tot / step) # Implicit float coercion of step
return ret
>>> blurryAverage([1,2,3,4,5,6],3)
[2.0, 2.0, 2.0, 5.0, 5.0, 5.0]
>>> blurryAverage([1,2,3],4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in blurryAverage
ValueError: Input data must be of divisible length