如何将一个2D数组切分成多个块

要将一个2D数组切分成多个块,可以考虑使用以下几种方法,具体取决于如何定义块的划分规则和需求。如果你希望将2D数组均匀地切分成固定大小的小块,可以使用简单的循环和切片操作。

在这里插入图片描述

1、问题背景

Python 中, 如果有一个 raw 数据文件,将其读入到字节缓冲区(python 字符串),其中每一个数据值代表一个2d 数组中 8 位像素。已知此图片的宽度和高度,想将图片切分成多个块,并且每一个块的面积必须大于最小块面积(如:1024 字节),小于最大块面积(如:2048 字节)。这些块的高度和宽度是任意的,只要满足面积约束即可,并且块的大小不必相同。此外,输入数据的长度也不一定是2的幂。

2、解决方案

方法一:

为了代码尽量简洁,可以将数据存储为按行存储的行。

import collections
import operatordef split_(seq, size):return [seq[i:i+size] for i in range(0,len(seq),size)]def split_image(data, width, height, MIN_AREA, MAX_AREA):tiles = list()if width >= MIN_AREA:# 每行可以细分为多个块tile_width = width / (width / MIN_AREA) # 整数除法rows = split_(data, width)row_tiles = [split_(row, tile_width) for row in rows]tiles = reduce(operator.add, row_tiles)elif width < MIN_AREA:# 每个块由多行组成min_tile_height = int(MIN_AREA / width) + 1tile_height = height / (height / min_tile_height)tile_size = tile_height * widthtiles = split_(data, tile_size)if len(tiles[-1]) < MIN_AREA:if (tile_height > 2):tiles[-2] += tiles[-1]del tiles[-1]else: # tile_height == 2, the case 1 don't pass here# 特殊情况,我们需要垂直分割最后三行# 如果宽度也是3,那么我们就遇到了问题,但如果我们在这里# 那么MIN_AREA为4,MAX_AREA为8,行数大于等于5if width > 3:last_three_rows = split_(tiles[-2] + tiles[-1], width)tiles[-2] = reduce(operator.add,[row[:width/2] for row in last_three_rows])tiles[-1] = reduce(operator.add,[row[width/2:] for row in last_three_rows])else: # width = 3 and MIN_AREA = 4last_five_rows = reduce(operator.add, tiles[-3:])three_columns = [last_five_rows[i::3] for i in range(3)]tiles[-3:] = three_columnsreturn tiles

方法二:

如果是在处理图片,可以使用 PIL(Python Imaging Library)。

import Imagedef split_image(imagefile, MIN_AREA, MAX_AREA):i = Image.open(imagefile)width, height = i.sizedata = list(i.getdata())tiles = list()if width >= MIN_AREA:tile_width = width / (width / MIN_AREA) # 整数除法for y in range(0, height, tile_width):for x in range(0, width, tile_width):box = (x, y, x + tile_width, y + tile_width)region = i.crop(box)tiles.append(list(region.getdata()))elif width < MIN_AREA:min_tile_height = int(MIN_AREA / width) + 1tile_height = height / (height / min_tile_height)tile_size = tile_height * widthfor y in range(0, height, tile_height):for x in range(0, width):box = (x, y, x + width, y + tile_height)region = i.crop(box)tiles.append(list(region.getdata()))return tiles

函数 split_image 将图像切成块,并将每个块的数据存储到一个列表中。然后可以对每个块单独处理。

有时候需要根据块的形状或大小来划分数组,这可能需要使用图像处理库或者几何算法来检测并划分块。这些示例展示了如何根据不同的需求将2D数组切分成多个块。具体选择哪种方法取决于我们的应用场景和数据结构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/44724.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SSM社区物业管理系统-计算机毕业设计源码91276

摘要 随着城市化进程的加快&#xff0c;居民社区的规模和数量不断增长&#xff0c;传统的人工管理方式已经无法满足管理需求。借助信息技术和互联网应用&#xff0c;社区物业管理系统可以实现物业管理信息的集中化、自动化和便捷化&#xff0c;提供全方位的管理和服务支持。社区…

使用kubeadm重置k8s集群

1.Master 节点和Work节点都需要执行&#xff1a;kubeadm reset kubeadm reset -hAvailable Commands:alpha Kubeadm experimental sub-commandscompletion Output shell completion code for the specified shell (bash or zsh)config Manage configuration for a…

智慧水利的变革之路:如何通过大数据、物联网和人工智能构建高效、智能、可持续的水利管理新模式

目录 一、引言&#xff1a;智慧水利的时代背景与意义 二、大数据&#xff1a;水利管理的数据基石 &#xff08;一&#xff09;数据收集与整合 &#xff08;二&#xff09;数据分析与挖掘 三、物联网&#xff1a;水利管理的感知神经 &#xff08;一&#xff09;智能感知与监…

ONLYOFFICE 8.1版本版本桌面编辑器测评

ONLYOFFICE官网链接&#xff1a;ONLYOFFICE - 企业在线办公应用软件 | ONLYOFFICE ONLYOFFICE在线办公套件&#xff1a;在线办公套件 | ONLYOFFICE ONLYOFFICE在线PDF编辑器、阅读器和转换器&#xff1a;在线PDF查看器和转换器 | ONLYOFFICE ONLYOFFICE 8.1版本桌面编辑器是…

Java面试之缓存中间件常见面试题

1. 请简述什么是缓存以及为什么需要使用缓存&#xff1f; 缓存是存储常用或临时数据的组件&#xff0c;用于提高数据访问速度。在Web应用中&#xff0c;缓存能够减少数据库访问次数&#xff0c;提高系统响应速度和吞吐量&#xff0c;从而提升用户体验和系统稳定性。 2. 列举一…

开源可视化Flutter图表库:Graphic

Graphic&#xff1a;用Graphic绘制数据的无限可能- 精选真开源&#xff0c;释放新价值。 概览 Graphic&#xff0c;这个基于Flutter的图表库&#xff0c;以其源自《The Grammar of Graphics》的灵感&#xff0c;为数据可视化提供了一种全新的方法。它不仅仅是一个工具&#xf…

【Pytorch】RNN for Image Classification

文章目录 1 RNN 的定义2 RNN 输入 input, h_03 RNN 输出 output, h_n4 多层5 小试牛刀 学习参考来自 pytorch中nn.RNN()总结RNN for Image Classification(RNN图片分类–MNIST数据集)pytorch使用-nn.RNNBuilding RNNs is Fun with PyTorch and Google Colab 1 RNN 的定义 nn.…

【ECCV 2024】首个跨模态步态识别框架:Camera-LiDAR Cross-modality Gait Recognition

【ECCV 2024】首个跨模态步态识别框架&#xff1a;Camera-LiDAR Cross-modality Gait Recognition 简介&#xff1a;主要方法&#xff1a;实验结果&#xff1a; 论文&#xff1a;https://arxiv.org/abs/2407.02038 简介&#xff1a; 步态识别是一种重要的生物特征识别技术。基…

算法力扣刷题记录 四十一【N叉树遍历】

前言 依然是遍历问题。由二叉树扩展到N叉树遍历。 记录 四十一【N叉树遍历】 一、【589. N叉树的前序遍历】 题目 给定一个 n 叉树的根节点 root &#xff0c;返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示&#xff0c;每组子节点由空值 null 分隔…

解锁SQL Server的迷宫:深入死锁的诊断与解决之道

解锁SQL Server的迷宫&#xff1a;深入死锁的诊断与解决之道 在数据库的世界中&#xff0c;死锁是一种常见的现象&#xff0c;它发生在两个或多个事务在访问资源时相互等待对方释放锁&#xff0c;从而导致无法继续执行的情况。SQL Server作为一种广泛使用的数据库管理系统&…

第十八章 Express multer 文件上传

本章将学习Express multer 文件上传 &#xff0c;因为Nest 的文件上传是基于 Express 的中间件 multer 实现的&#xff0c;所以在学习 Nest 文件上传之前&#xff0c;我们先学习下 multer 包 首先先创建 multer-test 文件夹执行下面代码 创建package.json npm init -y接着安装…

深入浅出 Spring @Async 异步编程的艺术

目录 一、异步编程 二、Async 介绍 2.1 Async 使用 三、Async 原理 一、异步编程 在软件开发中&#xff0c;异步编程是非常关键的&#xff0c;尤其是构建高性能、高响应度的应用时。异步编程的主要优势在于它能够避免阻塞操作&#xff0c;提高程序的效率和用户体验。异步编…

修BUG:程序包javax.servlet.http不存在

貌似昨晚上并没有成功在tomcat上面运行&#xff0c;而是直接运行了网页。 不知道为啥又报错这个。。。 解决方案&#xff1a; https://developer.baidu.com/article/details/2768022 就整了这一步就行了 而且我本地就有这个tomcat就是加进去了。 所以说啊&#xff0c;是不是&a…

eNSP公司管理的对象及策略

拓扑图[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 ) 实验需求 第一步&#xff1a;根据题目搭建拓扑图 其中交换机的型号为&#xff1a;S5700 防火墙设备为&#xff1a;USG6000V 第二步&#xff1a;启动防火墙设备 首先会让你输入密码&#xff0c;…

SQL MySQL定时器/事件调度器(Event Scheduler)

事件调度器&#xff08;Event Scheduler&#xff09;在MySQL数据库系统中是一个强大的功能组件&#xff0c;它允许用户定义一系列称为“事件”的数据库对象&#xff0c;这些事件在指定的时间或时间间隔自动执行预定义的SQL语句或操作。事件调度器通过维护一个时间计划表来管理这…

小抄 20240709

1 很多人做事&#xff0c;没有目标&#xff0c;没有主见&#xff0c;只是按照别人的指示去做&#xff0c;完全不清楚为什么去做。 你去问他为什么要做&#xff0c;他反而要和你急眼&#xff0c;觉得你在质疑他。 2 想要获得超出预期的成功&#xff0c;不是努力到极致&#x…

npm install报错:淘宝镜像证书过期

npm install报错&#xff1a;淘宝镜像证书过期 近期使用npm淘宝镜像新建项目或依赖时出现报错&#xff1a; npm ERR! request to https://registry.npm.taobao.org/xxx failed, reason: certificate has expired 错误原因&#xff1a; 早在 2021 年&#xff0c;淘宝就发文称…

【MySQL】常见的MySQL日志都有什么用?

MySQL日志的内容非常重要&#xff0c;面试中经常会被问到。同时&#xff0c;掌握日志相关的知识也有利于我们理解MySQL 底层原理&#xff0c;必要时帮助我们排查解决问题。 MySQL中常见的日志类型主要有下面几类(针对的是InnoDB 存储引擎): 错误日志(error log):对 MySQL 的启…

QScrollArea 设置最大的高度值

在 Qt 中&#xff0c;QScrollArea 是一个提供滚动视图的控件&#xff0c;允许用户查看大于当前视口尺寸的内容。如果你想要为 QScrollArea 设置一个最大的高度值&#xff0c;这通常不是直接通过 QScrollArea 的属性来设置的&#xff0c;而是需要调整其内容部件&#xff08;widg…

CentOS 6.5配置国内在线yum源和制作openssh 9.8p1 rpm包 —— 筑梦之路

CentOS 6.5比较古老的版本了&#xff0c;而还是有一些古老的项目仍然在使用。 环境说明 1. 更换国内在线yum源 CentOS 6 在线可用yum源配置——筑梦之路_centos6可用yum源-CSDN博客 cat > CentOS-163.repo << EOF [base] nameCentOS-$releasever - Base - 163.com …