如何在numpy或列表列表中填充一个圆形

2024-04-27 05:03:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数组:

 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]

Tags: 数据功能numpy数据结构列表数组list空格
3条回答
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,则此操作应该有效。然而,这并不是找到解决方案的最快方法。你知道吗

首先转换字符串列表,并执行以下命令:

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]

您可以尝试在其中一个轴上使用np.cumsum(即01作为参数):

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]])

相关问题 更多 >