我有以下 np 数组:[[0,4,3,5],[4,4,3,1],[49,1,4,3],[8,4,1,6],. ...]
我想添加一个包含最后 2 个值(第 3 列)的最小值的列。 所以第 [4] 列看起来是:[nan, nan, 1, 1]
我不能使用 pandas 或滚动窗口。我想只使用 numpy 来计算解决方案。 TIA!
尝试为每一行生成索引并使用 np.minimum.accumulate
可能有更简单的方法,但这有效:
a = np.array([[0,4,3,5],[4,4,3,1],[49,1,4,3],[8,4,1,6]])
b = np.array([min(a[i-2][-1],a[i-1][-1]) if i>1 else None for i in range(len(a))])
b = b.reshape(len(b), 1)
c = np.concatenate((a,b), axis=1)
# array([[0, 4, 3, 5, None],
# [4, 4, 3, 1, None],
# [49, 1, 4, 3, 1],
# [8, 4, 1, 6, 1]], dtype=object)
为了避免
for
循环并向量化工作负载,您可以定义:
a1 = a[:-2, -1]
a2 = a[1:-1, -1]
b = np.min((a1, a2), axis=1)
然后你所要做的就是用2个
None
完成b,然后像以前一样重塑和连接。