python - 如何更改只有 0 和 1 的 2d numpy 数组中所有 1 的索引?
问题描述
我有一个只有 0 和 1 的 2d numpy 数组(arr)。
例如,shape(h,w) 中的 2d numpy 数组。
我想将数组的大小调整为 shape(h // scale, w // scale),并且我需要保留所有的 1。
# arr is a 2d numpy array
h, w = arr.shape
h_new, w_new = h // scale, w // scale
arr_new = np.zeros((h_new, w_new))
for i in range(h):
for j in range(w):
if arr[i, j] == 1:
arr_new[i // scale, j // scale] = 1
例如,像这样的二维数组,并且 scale=2:
[
[0,0,0,0],
[0,1,0,0],
[1,0,0,1],
[0,0,0,1]
]
运行代码后, arr_new 将是:
[
[1,0],
[1,1]
]
所有1s坐标的变化:
(1,1) -> (0,0)
(2,0) -> (1,0)
(2,3) -> (1,1)
(3,3) -> (1,1)
有一个更好的方法吗?
谢谢。
解决方案
只需通过将每个维度拆分为 grid 来重塑数组(SIZE // SCALE, SCALE)
。max()
接下来使用让1
控制 SCALExSCALE 单元格的大小 SCALE 减小所有维度。
arr.reshape(h//scale, scale, w // scale, scale).max(axis=(1,3))
请注意,此解决方案需要 shape ofarray
为多重性 os (scale, scale)
。
推荐阅读
- javascript - vue 组件数据和计算属性
- java - 使用 Java Stream 从 ArrayList 获得最高分
- dart - TextField 的自动对焦属性导致小部件进入“脏”状态
- python - 在 numpy 数组中切片和在 Python 中切片列表有什么区别?
- spring - 在 AWS Lambda Spring boot 中加载自定义 ApplicationContextInitializer
- javascript - 如何在节点 js 中使用带有 sendgrid 的模板发送电子邮件
- google-app-engine - 无法使用 API KEY 连接到 GCP mysql 数据库,错误:请求中指定的项目无效
- python - Python给出了正则表达式的意外结束
- c# - 不明白为什么它不断抛出 System.InvalidOperationException
- kubernetes - 部署在 kubernetes 上的 open-faas 如何确定何时扩大或缩小功能?