Python +numpy数组膨胀(填充)方法总结

本文主要介绍数组的各种填充方法,包括数组按照原值复制扩大并填充,数组的扩大填充,数组边缘填充等。

1.数组的复制膨胀

形如二维数组:

[[1 2]

[3 4]]

膨胀为:

[[1 1 1 2 2 2]
 [1 1 1 2 2 2]
 [1 1 1 2 2 2]
 [3 3 3 4 4 4]
 [3 3 3 4 4 4]
 [3 3 3 4 4 4]]

实现方法:

array=np.array([[1,2],[3,4]])
array2=np.kron(array, np.ones((2, 2), dtype=array.dtype))

2.数组的填充

Python编程中,当我们经常需要为数组进行填充时,numpy的np.pad函数提供了一个快速、高效的方法。

基本语法:

numpy.pad(array, pad_width, mode, **kwargs)

各参数的含义如下:

  • array:需要填充的数组
  • pad_width:填充的宽度,可以是单个整数、单个整数元组、或者是多个整数元组
  • mode:填充模式,可以是常数、symmetric等

下面我们来进行测试:

2.1 一维数组填充

 首先使用一维数组测试,代码如下:

array = np.array([1, 2, 3, 4, 5,6,7])
array2 = np.pad(a, (0, 5), 'constant', constant_values=(0, 0))

运行结果:array2 [1 2 3 4 5 6 7 0 0 0 0 0]

改为一下参数:

array2 = np.pad(array, (2, 5), 'constant', constant_values=(0, 0))

运行结果:array2 [0 0 1 2 3 4 5 6 7 0 0 0 0 0]  前面填充两个0,后面填充5个0.

前面填充8,后面填充9:

array2 = np.pad(array, (2, 5), 'constant', constant_values=(8, 9))

运行结果:array2 [8 8 1 2 3 4 5 6 7 9 9 9 9 9]

2.2 二维数组填充 

 示例:

array=np.array([[1,2,3],[4,5,6],[7,8,9]])
array2 = np.pad(array, ((2, 5),(2, 5)), 'constant', constant_values=(8, 9))
print('array2',array2)

运行结果:

array2

[[8 8 8 8 8 9 9 9 9 9]
 [8 8 8 8 8 9 9 9 9 9]
 [8 8 1 2 3 9 9 9 9 9]
 [8 8 4 5 6 9 9 9 9 9]
 [8 8 7 8 9 9 9 9 9 9]
 [8 8 9 9 9 9 9 9 9 9]
 [8 8 9 9 9 9 9 9 9 9]
 [8 8 9 9 9 9 9 9 9 9]
 [8 8 9 9 9 9 9 9 9 9]
 [8 8 9 9 9 9 9 9 9 9]]

2.3 其他方式填充,边缘填充

除了常数模式之外,np.pad函数还支持其他几种填充模式,例如:

  • symmetric:对称填充,填充部分是源数组的镜像
  • edge:边缘填充,以数组的边缘元素进行填充
  • minimum/maximum:最小值/最大值填充,将数组填充至源数组的最小值或最大值

我们也可以结合使用多种填充模式,例如进行边缘填充:

array=np.array([[1,2,3],[4,5,6],[7,8,9]])
array2 = np.pad(array, ((2, 2),(2, 2)), mode='edge')
print('array2',array2)

 运行结果:array2

[[1 1 1 2 3 3 3]
 [1 1 1 2 3 3 3]
 [1 1 1 2 3 3 3]
 [4 4 4 5 6 6 6]
 [7 7 7 8 9 9 9]
 [7 7 7 8 9 9 9]
 [7 7 7 8 9 9 9]]

最大值填充:

array=np.array([[1,2,3],[4,5,6],[7,8,9]])
array2 = np.pad(array, ((2, 2),(2, 2)), mode='maximum')
print('array2',array2)

运行结果:array2

[[9 9 7 8 9 9 9]
 [9 9 7 8 9 9 9]
 [3 3 1 2 3 3 3]
 [6 6 4 5 6 6 6]
 [9 9 7 8 9 9 9]
 [9 9 7 8 9 9 9]
 [9 9 7 8 9 9 9]] 

对于边缘填充,我们还可以采用如下方法:

import numpy as npdef array_expand(array,expand_size):# 获取原始数组尺寸height, width = array.shape# 创建新的扩展后的数组expanded_array = np.zeros((height + expand_size+1, width + expand_size+1), dtype=array.dtype)# 复制原始数组到新数组的内部区域expanded_array[1:-1, 1:-1] = array# 将原数组的上下左右四周扩展expanded_array[0, 1:-1] = array[0, :]  # 复制第一行expanded_array[-1, 1:-1] = array[-1, :]  # 复制最后一行expanded_array[1:-1, 0] = array[:, 0]  # 复制第一列expanded_array[1:-1, -1] = array[:, -1]  # 复制最后一列expanded_array[0, 0] = array[0, 0]  # 左上角像素expanded_array[0, -1] = array[0, -1]  # 右上角像素expanded_array[-1, 0] = array[-1, 0]  # 左下角像素expanded_array[-1, -1] = array[-1, -1]  # 右下角像素# 返回扩展后的数组return expanded_arrayarray=np.array([[1,2,3],[4,5,6],[7,8,9]])
windows_size=7
for i in range(0 ,windows_size//2):array = array_expand(array, 1)print(array)

windows_size是进行卷积运算时候窗口的大小。

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

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

相关文章

简单易用且高效的跨平台开发工具:Xojo 2023 for Mac

Xojo for Mac是Mac平台上一个跨平台的针对桌面、Web、移动和Raspberry Pi的快速应用程序开发软件。与其他多平台开发工具相比,Xojo for Mac为开发人员提供了显着的生产率提高。 Xojo for Mac具有拖放功能,使您能够快速创建用户界面设计,然后…

Android保存网页的方法

首先要使用js交互就需要懂原理: 感谢大佬:js中document节点获取页面元素的六种方式 1.querySelector()方法 描述:本方法用于根据给定的选择器选中页面元素 如果有多个元素满足条件,则返回第一个满足条件的元素节点 语法&#xff…

GRPC-连接池-GPT

gRPC Dart 管理优化 User grpc for dart 如何统一管理多个Client的创建和销毁,给我一个最优解 ChatGPT 对于在Dart中使用gRPC创建和销毁多个Client的统一管理,您可以使用一个单例模式的管理类来实现最优解。 首先,创建一个管理类&#xff0c…

EPPlus 读取和生成Excel

在项目中添加了EPPlus库的引用,你可以通过NuGet包管理器或手动将EPPlus库添加到项目中。同时,需要注意的是EPPlus库支持的是xlsx格式的Excel文件。 读取 使用EPPlus读取本地Excel文件的示例代码如下: using OfficeOpenXml;public void Rea…

算法随笔:图论问题之割点割边

割点 定义 割点的定义:如果一个点被删除之后会导致整个图不再是一个连通图,那么这个顶点就是这个图的割点。举例: 上图中的点2就是一个割点,如果它被删除,则整个图被分为两个连通分量,不再是一个连通图。…

【交换排序】冒泡排序 与 快速排序

交换排序基本思想: 所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。 目录 1.冒泡排序 2.快…

OptaPlanner笔记5

2.4 与spring boot集成 2.4.4 添加依赖 <dependency><groupId>org.optaplanner</groupId><artifactId>optaplanner-spring-boot-starter</artifactId> </dependency>2.4.8 创建求解器服务 import org.optaplanner.core.api.solver.Solv…

Django笔记之数据库函数之日期函数

日期函数主要介绍两个大类&#xff0c;Extract() 和 Trunc() Extract() 函数作用是提取日期&#xff0c;比如我们可以提取一个日期字段的年份&#xff0c;月份&#xff0c;日等数据 Trunc() 的作用则是截取&#xff0c;比如 2022-06-18 12:12:12&#xff0c;我们可以根据需求…

CSS:弹性盒子模型详解(用法 + 例子 + 效果)

目录 弹性盒子模型flex-direction 排列方式 主轴方向换行排序控制子元素缩放比例缩放是如何实现的&#xff1f; 控制子元素的对其方式justify-content 横向 对齐方式align-items 纵向 对齐方式 align-content 多行 对齐方式 弹性盒子模型 flex-direction 排列方式 主轴方向 f…

CI+JUnit5并发单测机制创新实践

目录 一. 现状问题 二. 分析原因 三. 采取措施 四. 实践步骤 五. 效能提升 资料获取方法 一. 现状问题 针对现如今高并发场景的业务系统&#xff0c;“并发问题” 终归是必不可少的一类&#xff08;占比接近10%&#xff09;&#xff0c;每次出现问题和事故后&#xff0c…

CNN经典网络模型之GoogleNet论文解读

目录 1. GoogleNet 1.1 Inception模块 1.1.1 1x1卷积 1.2 辅助分类器结构 1.3 GoogleNet网络结构图 1. GoogleNet GoogleNet&#xff0c;也被称为Inception-v1&#xff0c;是由Google团队在2014年提出的一种深度卷积神经网络架构&#xff0c;专门用于图像分类和特征提取任…

vConsole手机调试模式uniapp和原生h5

手机打开调试模式的方法 尽量放在页面头部&#xff0c;底部有可能不行 原生 <script src"https://cdn.bootcss.com/vConsole/3.3.0/vconsole.min.js"></script> <script>// init vConsolevar vConsole new VConsole();console.log(Hello world)…

ElasticSearch安装与启动

ElasticSearch安装与启动 【服务端安装】 1.1、下载ES压缩包 目前ElasticSearch最新的版本是7.6.2&#xff08;截止2020.4.1&#xff09;&#xff0c;我们选择6.8.1版本&#xff0c;建议使用JDK1.8及以上。 ElasticSearch分为Linux和Window版本&#xff0c;基于我们主要学习…

Linux服务器映射到本地磁盘

内容来自网友博客。 把linux服务器上的文件夹映射到本地作为一个磁盘来访问&#xff0c;步骤如下 一. samba的安装: sudo apt-get install samba // (sudo get temp root auth) sudo apt-get install smbfs //旧版本 sudo apt-get install cifs-utils //新版本 上…

【reactNative混合安卓开发~使用问题持续更】

reactNative混合安卓开发 reactNative开发移动端reactNative界面开发前端init.bat文件部分组件第三方组件解析1、定义theme主题shopify/restyle&#xff1b;菜单导航react-navigation/drawer、react-navigation/native&#xff1b; RN问题记录1、使用theme.js写的公共组件报错&…

【博客699】docker daemon预置iptables剖析

docker daemon预置iptables剖析 没有安装docker的机器&#xff1a;iptables为空&#xff0c;且每个链路的默认policy均为ACCEPT [root~]# iptables-save[root ~]# iptables -t raw -nvL Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)pkts bytes target prot opt …

k8s node 误删除了如何自动创建 csr重新加入集群

worker node 节点当部署晚 kubelet、kube-proxy就会加入集群&#xff0c;如何加入呢&#xff0c; [rootkube-node01 ssl]# mv kubelet-client-2023-08-13-01-19-00.pem kubelet-client-current.pem kubelet.crt kubelet.key /tmp/kubelet [rootkube-node01 ssl]# systemctl da…

Java 正则表达式【基本语法】

基本介绍 首先我们需要了解的是正则表达式中的各种元字符的功能&#xff0c;主要分为以下几种&#xff1a; 限定符选择匹配符分组组合和反向引用符特殊字符字符匹配符定位符 需要注意的是&#xff1a;在 Java正则表达式中&#xff0c;两个斜杠 \\ 相当于其它语言中的一个斜杠…

认识vite

一.了解vite的不同版本的更新 vite1版本是基于vue项目的&#xff0c;无法跨框架使用vite2可以跨框架&#xff08;vue2&#xff0c;vue3&#xff0c;react&#xff09;vite3模板变更&#xff1b;vite cli优化&#xff1b;import.meta.glob API变化&#xff1b;其他vite4主版本主…

Django框架-使用celery(一):django使用celery的通用配置,不受版本影响

目录 一、依赖包情况 二、项目目录结构 2.1、怎么将django的应用创建到apps包 三、celery的配置 2.1、celery_task/celery.py 2.2、celery_task/async_task.py 2.3、celery_task/scheduler_task.py 2.4、utils/check_task.py 四、apps/user中配置相关处理视图 4.1、基本…