gpt4 book ai didi

python-2.7 - numpy 数组中连续元素的第一次出现

转载 作者:行者123 更新时间:2023-12-03 12:51:23 26 4
gpt4 key购买 nike

我有一个二进制 numpy 掩码数组,当至少连续 3 次出现 1 时,我想找到沿 axis=0 的元素的索引。如果没有出现,则 -999 或 NaN 或任何显示它的内容不是索引。所以例如我的数组是这样的:

masked_array(
data=[[[1.0, 0.0],
[0.0, 1.0]],

[[0.0, 1.0],
[0.0, 1.0]],

[[1.0, 1.0],
[1.0, 1.0]],

[[1.0, 1.0],
[1.0, 0.0]],

[[1.0, --],
[0.0, 1.0]],

[[1.0, 1.0],
[1.0, 1.0]]])

我想得到这样的东西:

array([[   2,    1],
[-999, 0]])

最符合 Python 风格的方法是什么?任何提示将不胜感激。

最佳答案

IIUC,你可以先把你的 np 数组做成二维的,然后建立一个数据框,这会让一切变得更容易。看看

row, cols = m.shape[0], m.shape[1] * m.shape[2]
df = pd.DataFrame(m.reshape(row, cols))

0 1 2 3
0 1.0 0.0 0.0 1.0
1 0.0 1.0 0.0 1.0
2 1.0 1.0 1.0 1.0
3 1.0 1.0 1.0 0.0
4 1.0 0.0 0.0 1.0
5 1.0 1.0 1.0 1.0

现在您可以在axis=0 上使用3 的反向滚动 窗口,并检查所有 元素是 1

ndf = df[::-1].rolling(3, axis=0).apply(all, raw=True)[::-1]

0 1 2 3
0 NaN NaN NaN 1.0
1 NaN 1.0 NaN NaN
2 1.0 NaN NaN NaN
3 1.0 NaN NaN NaN
4 NaN NaN NaN NaN
5 NaN NaN NaN NaN

并使用idxmax() 获取第一个1 出现的索引

ndf[ndf>=1].idxmax()

0 2.0
1 1.0
2 NaN
3 0.0
dtype: float

要以您描述的方式可视化,只需 reshape 输出

ndf[ndf>=1].idxmax().values.reshape(m.shape[1], m.shape[2])

array([[ 2., 1.],
[nan, 0.]])

关于python-2.7 - numpy 数组中连续元素的第一次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51602862/

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