gpt4 book ai didi

python - 使用索引偏移堆叠数组的简单方法

转载 作者:行者123 更新时间:2023-11-28 22:37:50 24 4
gpt4 key购买 nike

我有许多时间序列,每个时间序列都包含一年中几周的测量值,但并非所有时间序列都在同一周开始和结束。我知道偏移量,也就是说我知道每个偏移量在哪几周开始和结束。现在我想将它们组合成一个关于固有偏移量的矩阵,以便所有值都与正确的周数对齐。

如果水平方向包含系列,垂直方向表示周,给定两个系列ab,其中值对应周数:

a = np.array([[1,2,3,4,5,6]])
b = np.array([[0,1,2,3,4,5]])

我想知道是否可以将它们组合起来,例如使用某种方法以 combine((a, b), axis=0, offset=-1) 的方式接受偏移量参数,这样生成的数组(我们称之为 c ) 看起来像这样:

print c
[[NaN 1 2 3 4 5 6 ]
[0 1 2 3 4 5 NaN]]

更重要的是,由于时间序列很大,我必须通过我的程序流式传输它们,因此无法同时知道所有偏移量。我想到使用 Pandas,因为它有很好的索引,但我觉得必须有一种更简单的方法,因为我想做的事情的本质非常简单。

更新:这似乎有效

def offset_stack(a, b, offset=0):
if offset < 0:
a = np.insert(a, [0] * abs(offset), np.nan)
b = np.append(b, [np.nan] * abs(offset))
if offset > 0:
a = np.append(a, [np.nan] * abs(offset))
b = np.insert(b, [0] * abs(offset), np.nan)

return np.concatenate(([a],[b]), axis=0)

最佳答案

你可以在 numpy 中做:

def f(a, b, n):
v = np.empty(abs(n))*np.nan
if np.sign(n)==-1:
return np.vstack((np.append(a,v), np.append(v,b)))
elif np.sign(n)==1:
return np.vstack((np.append(v,a), np.append(b,v)))
else:
return np.vstack((a,b))

#In [148]: a = np.array([23, 13, 4, 12, 4, 4])

#In [149]: b = np.array([4, 12, 3, 41, 45, 6])

#In [150]: f(a,b,-2)
#Out[150]:
#array([[ 23., 13., 4., 12., 4., 4., nan, nan],
# [ nan, nan, 4., 12., 3., 41., 45., 6.]])

#In [151]: f(a,b,2)
#Out[151]:
#array([[ nan, nan, 23., 13., 4., 12., 4., 4.],
# [ 4., 12., 3., 41., 45., 6., nan, nan]])

#In [152]: f(a,b,0)
#Out[152]:
#array([[23, 13, 4, 12, 4, 4],
# [ 4, 12, 3, 41, 45, 6]])

关于python - 使用索引偏移堆叠数组的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36159174/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com