Python 如何替换屏蔽数组中的每N个空元素?

Python 如何替换屏蔽数组中的每N个空元素?,python,numpy,Python,Numpy,如何替换掩码数组中找到的每个系列元素之后的每个第一个空元素。这有点难以解释,但以下示例说明了我想做的事情: import numpy as np data = np.array([1,1,1,3,3,3,1,1,1,3,3,3,5,5,5,5,1,1]) Ones = np.ma.masked_where(data > 2, data) print(Ones) Output: [1 1 1 -- -- -- 1 1 1 -- -- -- -- -- -- -- 1 1 1 -- --

如何替换掩码数组中找到的每个系列元素之后的每个第一个空元素。这有点难以解释,但以下示例说明了我想做的事情:

import numpy as np

data = np.array([1,1,1,3,3,3,1,1,1,3,3,3,5,5,5,5,1,1])
Ones = np.ma.masked_where(data > 2, data)

print(Ones)

Output: [1 1 1 -- -- -- 1 1 1 -- -- -- -- -- -- -- 1 1 1 -- -- 1 -- -- -- -- 1 1 1 -- -- -- 1]
我想在每个连续的一行之后再添加一个1,因此结果将是:

[1 1 1 1 -- -- 1 1 1 1 -- -- -- -- -- -- 1 1 1 1 -- 1 1 -- -- -- 1 1 1 1 -- -- 1 1]

列表理解+如果编程可以使此作业内联:

data2 = [ 1 if (i>0 and data[i-1]==1 and x!=1) else x for i,x in enumerate(data) ]
第一个if表示第一个列表元素异常

第二个if用于检测前一个元素是否为1


第三,如果要检查我们是否有一些新值要替换。

列表理解+如果编程可以使此作业内联:

data2 = [ 1 if (i>0 and data[i-1]==1 and x!=1) else x for i,x in enumerate(data) ]
第一个if表示第一个列表元素异常

第二个if用于检测前一个元素是否为1


第三,检查是否有新的值需要替换。

我试图找到一种不使用python循环的方法,并发现我们可以使用scipy的ndimage库来扩展掩码:

将numpy作为np导入 将scipy.ndimage导入为nd data=np.数组[1,1,1,3,3,3,1,1,3,3,3,3,5,5,5,1,1] 掩码=np.wheredata==1,数据,0 [1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 1 1] 第二个参数让'binary_diagration'知道我们只想向右扩展 扩展的_掩码=nd.binary_掩码,np.array[0,1,1] 如果掩码[-1]: 扩展的屏蔽=np.r[扩展的屏蔽,1] [1 1 1 1 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1]
最后的条件是仅当我们需要插入最后一个1时。

我试图找到一种不使用python循环的方法,并发现我们可以使用scipy的ndimage库来扩展掩码:

将numpy作为np导入 将scipy.ndimage导入为nd data=np.数组[1,1,1,3,3,3,1,1,3,3,3,3,5,5,5,1,1] 掩码=np.wheredata==1,数据,0 [1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 1 1] 第二个参数让'binary_diagration'知道我们只想向右扩展 扩展的_掩码=nd.binary_掩码,np.array[0,1,1] 如果掩码[-1]: 扩展的屏蔽=np.r[扩展的屏蔽,1] [1 1 1 1 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1] 仅当需要插入最后一个1时,结尾处的条件才有效