我有以下数组:
0 0 0 1 1 1 1 1 0 0
0 0 1 0 0 0 0 0 1 0
0 1 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
1 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 1
0 0 1 0 0 0 0 0 1 0
我如何用圆圈填充空格?
目前数据结构是10x10的numpy数组,但是我可以将数据保留为10个列表。
例如,列表2为:
list_2 = [0 0 1 0 0 0 0 0 1 0]
然后应用该功能将变为:
list_2 = [0, 0, 1, 1, 1, 1, 1, 1, 1, 0]
答案 0 :(得分:1)
您可以尝试在其中一个轴上使用np.cumsum
(即0
或1
作为参数):
crcl[crcl.cumsum(0)==1] = 1
array([[0, 0, 0, 1, 1, 1, 1, 1, 0, 0],
[0, 0, 1, 1, 1, 1, 1, 1, 1, 0],
[0, 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, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 0, 1, 1, 1, 1, 1, 1, 1, 0]])
分步说明:
这是您以numpy开头的数组:
crcl
array([[0, 0, 0, 1, 1, 1, 1, 1, 0, 0],
[0, 0, 1, 0, 0, 0, 0, 0, 1, 0],
[0, 1, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 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, 1],
[0, 0, 1, 0, 0, 0, 0, 0, 1, 0]])
累积总和将内部空间与外部空间分隔开,因为它仅在边界处发生变化:
crcl.cumsum(0)
array([[0, 0, 0, 1, 1, 1, 1, 1, 0, 0],
[0, 0, 1, 1, 1, 1, 1, 1, 1, 0],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[2, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[3, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[4, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[5, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[5, 2, 1, 1, 1, 1, 1, 1, 1, 2],
[5, 2, 2, 1, 1, 1, 1, 1, 2, 2]], dtype=int32)
因此,您可以将其用作掩码,以仅处理累加等于1
的那些索引。
mask = crcl.cumsum(0)==1
并将这些位置处的l本身的值设置为1
:
crcl[mask] = 1
crcl
array([[0, 0, 0, 1, 1, 1, 1, 1, 0, 0],
[0, 0, 1, 1, 1, 1, 1, 1, 1, 0],
[0, 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, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 0, 1, 1, 1, 1, 1, 1, 1, 0]])
答案 1 :(得分:1)
def fil_list(l):
begin = l.index(max(l))
end = l[begin+1:].index(max(l))+begin
for i in range(begin+1,end+1):
l[i] = 1
return l
如果列表中两个都为1,这应该可以工作。但是,这不是找到解决方案的最快方法。
答案 2 :(得分:0)
首先转换字符串的ot列表,然后执行以下命令:
y = [ 0 0 0 1 1 1 1 1 0 0,
0 0 1 0 0 0 0 0 1 0,
0 1 0 0 0 0 0 0 0 1,
1 0 0 0 0 0 0 0 0 0,
1 0 0 0 0 0 0 0 0 0,
1 0 0 0 0 0 0 0 0 0,
1 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 1,
0 0 1 0 0 0 0 0 1 0]
yStr = list(map(str,y))
yStr0 = yStr[0]
y0 = list(map(int,yStr0))
y0的结果:
y0 = [0, 0, 0, 1, 1, 1, 1, 1, 0, 0]