Python 替换NumPy数组中两个给定值之间的值
我正在努力寻找更好的方法来完成以下任务: 查看NumPy数组的列,我需要将两个1之间的所有值替换为1。 示例输入数组如下所示:Python 替换NumPy数组中两个给定值之间的值,python,arrays,numpy,Python,Arrays,Numpy,我正在努力寻找更好的方法来完成以下任务: 查看NumPy数组的列,我需要将两个1之间的所有值替换为1。 示例输入数组如下所示: array([[[1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 1.], [1., 1., 1., 0., 0., 0., 0., 1., 1., 1., 1., 1., 1., 0., 0.], [0., 0., 0., 0., 0., 0., 0., 0., 0., 0
array([[[1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 1.],
[1., 1., 1., 0., 0., 0., 0., 1., 1., 1., 1., 1., 1., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[1., 1., 0., 0., 0., 0., 0., 1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]],
它必须转换成这个数组:
array([[[1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 1.],
[1., 1., 1., 0., 0., 0., 0., 1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 0., 0., 0., 0., 1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 0., 0., 0., 0., 1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 0., 0., 0., 0., 1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 0., 0., 0., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 0., 0., 0., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 0., 0., 0., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 0., 0., 0., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 0., 0., 0., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 0., 0., 0., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 0., 0., 0., 0., 1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 0., 0., 0., 0., 0., 1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 0., 0., 0., 0., 0., 1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]],
后续问题:是否可以交替填写矩阵,从上到下每列(填写前两个1之间的空格,然后跳到下一个1并重复):
我已经可以使用for循环和条件实现这个功能,但是由于我使用的数组的大小,代码太慢了。使用
np.max.accumulate可以非常接近
编辑:这是正确的解决方案(由于额外的轴,有点难看)
>>将numpy作为np导入
>>>arr=np.数组([[1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1.]),
... [1., 1., 1., 0., 0., 0., 0., 1., 1., 1., 1., 1., 1., 0., 0.],
... [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
... [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
... [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
... [0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.],
... [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
... [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
... [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
... [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
... [0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.],
... [0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
... [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
... [1., 1., 0., 0., 0., 0., 0., 1., 1., 1., 1., 1., 1., 1., 1.],
... [1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]]])
>>>向上=np.最大累积(arr,轴=1)
>>>向下=np.翻转(np.最大值.累计(np.翻转(arr,轴=1),轴=1),轴=1)
>>>np.logical_和(向上、向下).astype(int)
数组([[1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1],
[1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]])
后续问题:
[[0.], [[0.],
[1.], [1.],
[0.], [1.],
[0.], [1.],
[1.], [1.],
[0.], [0.],
[0.], [0.],
[1.], --> [1.],
[0.], [1.],
[0.], [1.],
[0.], [1.],
[1.], [1.],
[0.], [0.],
[0.], [0.],
[1.]], [1.]],