numpy知识库:深入理解numpy.resize函数和数组的resize方法

news2024/11/24 4:10:23

前言

numpy中的resize函数顾名思义,可以用于调整数组的大小。但具体如何调整?数组形状变了,意味着数组中的元素个数发生了变化(增加或减少),如何确定resize后的新数组中每个元素的数值呢?本次博文就来探讨并试图回答这个问题,感兴趣的小伙伴可以继续阅读下去,希望对您有所启示~

numpy中的resize函数背后的机理

纯粹的文字说明不太直观,小编更倾向用代码工具进行直观展示。代码如下

import numpy as np
import cv2

img1 = np.zeros((256, 256), dtype=np.uint8) # 创建一个大小为256*256的全黑图像
for i in range(256):
    if i % 2 == 0: # 如果第i行是偶数行,则该行所有值设为255, 即全白,否则全黑;i从0开始
        img1[i, :] = 255
cv2.imshow('img1', img1)
cv2.waitKey(0) # 显示图像 延迟5秒退出窗口

结果如下:
在这里插入图片描述
可以看出,利用代码生成的图片是黑白相间分布的灰度图像,图像大小为256×256。
如果此时用numpy中的resize函数将上图调整成大小为256×512的新图像,那么新图像会长成什么样呢?还是黑白相间分布吗?

代码如下:

import numpy as np
import cv2

img1 = np.zeros((256, 256), dtype=np.uint8) # 创建一个大小为256*256的全黑图像
for i in range(256):
    if i % 2 == 0: # 如果第i行是偶数行,则该行所有值设为255, 即全白,否则全黑;i从0开始
    
img1 = np.resize(img1, (256, 512)) # 调整图像大小

cv2.imshow('img1', img1)
cv2.waitKey(0) # 显示图像 延迟5秒退出窗口

运行结果如下:
在这里插入图片描述

结果竟然是左白右黑(有没有出乎你的意料呢?有的话可以点个赞支持一下~)

背后的机理解读

利用numpy的resize函数从黑白相间分布的大小为256×256的原图调整为256×512的新图像后,竟然呈现出左白右黑的现象。咋一看,似乎摸不着头脑,其实背后的机理很简单。
机理:当新图像的大小确定后,就把原图的像素从左到右从上到下【依次填入】新图像。由于原图第一行全白,第二行全黑,而第一行像素和第二行像素之和恰好等于新图像第一行像素之和。以此类推,便会出现左白右黑的结果。

numpy的resize函数 vs numpy数组的resize方法

提到numpy的resize函数,就自然而然地会想到numpy数组的resize方法。同样是调整数组/图像的大小,两者的使用有何区别呢?还是那句话:show you the code!

区别一:numpy数组的resize方法是in-place操作

# numpy数组的resize方法
img1.resize((256, 512))  # numpy数组的resize方法是in-place操作,即直接在原数组/图像上修改,而numpy的resize函数需要返回一个新数组

区别二:numpy数组的resize方法在新数组大小>原数组时,直接填充0,并不继续填充原数组数值

# numpy数组的resize方法
img1.resize((256, 512))  # numpy数组的resize方法是in-place操作,即直接在原数组/图像上修改,而numpy的resize函数需要返回一个新数组
cv2.imshow('img1', img1)
cv2.waitKey(0) # 显示图像 延迟5秒退出窗口

结果如下:
在这里插入图片描述
容易发现,numpy数组的resize方法在填充完一遍原数据的数值后(上图的上半部分),剩余的数值直接填充0(上图的下半部分,即全黑)

如果本博文对你有所帮助,可以点个赞/收藏支持一下,如果能够持续关注,小编感激不尽~
小编会坚持创作,持续优化博文质量,以小见大,给读者带来更好地阅读体验~

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

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

相关文章

润申信息企业标准化管理系统 SQL注入漏洞复现

0x01 产品简介 润申信息科技企业标准化管理系统通过给客户提供各种灵活的标准法规信息化管理解决方案,帮助他们实现了高效的标准法规管理,完成个性化标准法规库的信息化建设。 0x02 漏洞概述 润申信息科技企业标准化管理系统 CommentStandardHandler.as…

蓝桥杯每日一题2023.11.30

题目描述 九数组分数 - 蓝桥云课 (lanqiao.cn) 题目分析 此题目实际上是使用dfs进行数字确定,每次循环中将当前数字与剩下的数字进行交换 eg.1与2、3、4、、、进行交换 2与3、4、、、进行交换 填空位置将其恢复原来位置即可,也就直接将其交换回去即可…

鸿蒙原生应用/元服务开发-开发者如何进行真机测试

前提条件:已经完成鸿蒙原生应用/元服务开发,已经能相对熟练使用DevEco Studio,开发者自己有鸿蒙4.0及以上的真机设备。 真机测试具体流程如下 1.手机打开开发者模式 2.在项目中,左上角 文件(F)->项目结构 进行账号连接 3.运行

AS 之 gradle 命令

文章目录 1、命令大全2、编译命令2.1 检查依赖并编译打包2.2 编译并打 Debug 包2.3 编译打出 Debug 包并安装2.4 编译并打出 Release 包2.5 编译打出 Release 包并安装2.6 Debug/Release 编译并打印日志 3、清除命令4、卸载命令4.1 卸载 Debug/Release 安装包4.2 adb 卸载 5、调…

智能优化算法应用:基于风驱动算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于风驱动算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于风驱动算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.风驱动算法4.实验参数设定5.算法结果6.参考文献7.…

麒麟操作系统进入单用户模式

Kylin V4 桌面版: 启动系统后,在启动菜单界面选择 Kylin 4.0.2 高级选项后回车。 在高级模式选项下选择第二行 recovery mode 模式后,按 e 编辑。 按 e 后如下图,找到 linux 开头的一行,修改 ro 为 rw 后&#xff0c…

将项目放到gitee上

参考 将IDEA中的项目上传到Gitee仓库中_哔哩哔哩_bilibili 如果cmd运行ssh不行的话,要换成git bash 如果初始化后的命令用不了,直接用idea项放右键,用git工具操作

[原创][3]探究C#多线程开发细节-“用ConcurrentQueue<T>解决多线程的无顺序性的问题“

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XXQQ: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delphi…

数据中心布线解决方案比较: DAC 电缆和 AOC 光缆

在当今的数字时代,数据中心是无数行业的支柱,它确保了信息的交换并维护关键数据的完整性。为了保持这些数据中心高效运行,选择正确的布线解决方案至关重要。在这方面,两种流行的选择是直连铜缆 (DAC) 和有源光缆 (AOC)。在本文中&…

论文绘图——局部细节放大

文章目录 前言一、绘图1.0版二、绘图2.0版三、总结 前言 我们经常在论文中会看到下面这些样式的图片:在图片中使用矩形框框出感兴趣的区域,然后在底部或者其他位置附上对应的局部放大的细节图,简洁好看。✨ 曾尝试使用过PPT制作,也…

用于缓存一些固定名称的小组件

项目中,用于缓存姓名、地名、单位名称等一些较固定名称的id-name小组件。用于减少一些表的关连操作和冗余字段。优化代码结构。扩展也方便,写不同的枚举就行了。 具体用法: {NameCacheUser.USER.getName(userId);NameCacheUser.ACCOUNT.getN…

GAN:WGAN前作

WGAN前作:有原则的方法来训练GANs 论文:https://arxiv.org/abs/1701.04862 发表:ICLR 2017 本文是wgan三部曲的第一部。文中并没有引入新的算法,而是标是朝着完全理解生成对抗网络的训练动态过程迈进理论性的一步。 文中基本是…

Django 模板引擎 (四)

一、Django模板引擎 一个强大的工具,用于在HTML页面中嵌入动态内容。它使用一种被称为Django模板语言(Django Template Language)的简单而强大的语法来处理模板。该模板语言使用”{% %}”进行标记,用于执行各种操作。 二、Django…

高效率:使用DBeaver连接spark-sql

提高运行效率一般采取底层使用spark引擎替换成hive引擎的方式提高效率,但替换引擎配置较为复杂考虑到兼容版本且容易出错,所以本篇将介绍使用DBeaver直接连接spark-sql快速操作hive数据库。 在spark目录下运行以下命令,创建一个SparkThirdSe…

TA、TB、TC油封各自用途

在机械系统应用中,油封在防止润滑剂从机器和轴承间隙泄漏方面发挥着至关重要的作用。在各种类型的油封中,常用的是TA、TB、TC密封件。本文将深入探讨这三种密封件各自的用途。 TA、TB和TC密封件都是油封的类型,但它们的设计和应用有所不同。…

java设计模式学习之【对象池模式】

文章目录 引言对象池模式简介定义与用途实现方式 使用场景优势与劣势对象池模式在Spring中的应用JDBC对象池示例代码地址小结 引言 对象池模式在资源管理和性能优化方面发挥着重要作用。这种模式通过重复使用已经初始化的对象,而不是频繁创建和销毁,减少…

计算机体系结构----流水线技术(三)

本文仅供学习,不作任何商业用途,严禁转载。绝大部分资料来自----计算机系统结构教程(第二版)张晨曦等 计算机体系结构----流水线技术(三) 3.1 流水线的基本概念3.1.1 什么是流水线3.1.2 流水线的分类1. 部件级流水线、处理机级流…

图解系列--HTTPS,认证

确保 Web 安全的HTTPS 1.HTTP 的缺点 1.1.通信使用明文可能会被窃听 加密处理防止被窃听 加密的对象可以有这么几个。 (1).通信的加密 HTTP 协议中没有加密机制,但可以通过和 SSL(Secure Socket Layer,安全套接层)或TLS&#xff…

搭建JMeter分布式压测环境轻松应对

引言 您想要提高您的应用程序的性能吗?想要确保它在高负载下仍然能够正常工作吗?那么,您一定需要一个可靠的性能测试工具来帮助您完成这个任务。 JMeter是一个广泛使用的性能测试工具,但是如果您的测试需求变得更加复杂和庞大&a…

数据结构与算法编程题35

用按层次顺序遍历二叉树的方法&#xff0c;统计树中具有度为1的结点数目。 #define _CRT_SECURE_NO_WARNINGS#include <iostream> using namespace std;typedef char ElemType; #define ERROR 0 #define OK 1 #define Maxsize 100 #define STR_SIZE 1024typedef struct B…