如何将一个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;提供全方位的管理和服务支持。社区…

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

目录 一、引言&#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版本桌面编辑器是…

开源可视化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 分隔…

第十八章 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;…

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

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

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 …

新兴市场游戏产业爆发 传音以技术抢抓机遇 ​

随着年轻人口的增加以及互联网的普及,非洲、中东等新兴市场正迎来游戏产业的大爆发,吸引着全球游戏企业玩家在此开疆辟土。中国出海企业代表传音以新兴市场需求为中心,秉持本地化创新理念不断加强游戏等关键领域技术攻关凭借移动终端设备为全球玩家带来极致游戏体验,收获了消费…

就业平台小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;企业管理&#xff0c;企业类型管理&#xff0c;留言板管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;招聘信息&#xff0c;简历&#xff0c;我的…

MapReduce底层原理详解:大案例解析(第32天)

系列文章目录 一、MapReduce概述 二、MapReduce工作机制 三、Map&#xff0c;Shuffle&#xff0c;reduce阶段详解 四、大案例解析 文章目录 系列文章目录前言一、MapReduce概述二、MapReduce工作机制1. 角色与组件2. 作业提交与执行流程1. 作业提交&#xff1a;2. Map阶段&…

MATLAB中c2d函数用法

目录 语法 说明 示例 在MATLAB中&#xff0c;c2d函数用于将连续时间系统&#xff08;Continuous-Time System&#xff09;转换为离散时间系统&#xff08;Discrete-Time System&#xff09;。以下是c2d函数的基本语法、说明以及示例&#xff1a; 语法 sys_d c2d(sys_c, T…

【每天认识一个漏洞】spf邮件伪造漏洞

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 &#x1f3a3;漏洞危害 允许攻击者伪造发件人身份&#xff0c;从而发送钓鱼邮件或垃圾邮件&#xff0c;获取接收方的信任&am…

[leetcode]partition-list 分隔链表

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:ListNode* partition(ListNode* head, int x) {ListNode *smlDummy new ListNode(0), *bigDummy new ListNode(0);ListNode *sml smlDummy, *big bigDummy;while (head ! nullptr) {if (head->val &l…

YOLOv10改进 | 添加注意力机制 | 添加ACmix自注意力与卷积混合模型改善模型特征识别效率(包含二次创新PSA机制)

一、本文介绍 本文给大家带来的改进机制是ACmix自注意力机制的改进版本&#xff0c;它的核心思想是&#xff0c;传统卷积操作和自注意力模块的大部分计算都可以通过1x1的卷积来实现。ACmix首先使用1x1卷积对输入特征图进行投影&#xff0c;生成一组中间特征&#xff0c;然后根…