Python Numpy - 移动最小值(最后 N-1 个值)

问题描述 投票:0回答:1

我有以下 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

python numpy-ndarray
1个回答
0
投票

可能有更简单的方法,但这有效:

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,然后像以前一样重塑和连接。

© www.soinside.com 2019 - 2024. All rights reserved.