Python 2.7 numpy数组中连续元素的首次出现

Python 2.7 numpy数组中连续元素的首次出现,python-2.7,pandas,numpy,Python 2.7,Pandas,Numpy,我有一个二进制numpy掩码数组,我想在至少连续出现3次1时,找到沿轴=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]], [

我有一个二进制numpy掩码数组,我想在至少连续出现3次1时,找到沿轴=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]])

做这件事最像蟒蛇的方式是什么?任何提示都将不胜感激。

IIUC,您可以先将np阵列制作成2D,然后构建一个数据帧,这将使一切变得更简单。看一看

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
现在,您可以在
轴=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
要可视化您描述的方式,只需重塑输出

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

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

绝妙的解决方案!谢谢。虽然它解决了我的问题,但只是想知道它是否可以只用numpy而不是熊猫?