python - 如何在 numpy 或列表列表中填充圆圈
问题描述
我有以下数组:
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]
解决方案
您可以尝试使用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)
因此,您将其用作掩码来仅处理 cumsum 等于 的那些索引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]])
推荐阅读
- arrays - Micronaut API 和带有控制器的客户端使用 Protobuf
- java - 当有 2 个日期字段时,不会使用 WebDriverWait 处理 org.openqa.selenium.ElementNotVisibleException。如何解决?[不重复]
- cassandra - 更新列表类型字段中多个元素的正确方法
- php - 在 WooCommerce 中添加/删除自定义费用的复选框字段
- regex - 高效的正则表达式脚本是在关键字中选择最近的锚标记
- vue.js - Vue.js 循环模板
- python - 多(单输出)神经网络与单(多目标)神经网络有什么区别?
- android - 根据 Android 中的特定语言环境以编程方式翻译字段
- spss - SPSS中具有多个变量的重叠直方图
- python - 如何在新窗口中更改背景颜色?