NumPy 数据操作实用指南:从基础到高效(下)

news2024/11/18 23:03:08

文章接上篇:

In [53]:

from PIL import Image

In [60]:

dog = Image.open('./dog.jpg')

dog

. . .

In [61]:

dog_data=np.array(dog)

# 图片数据是ndarray
# 彩色照片三维:高度,宽度,像素(表示不同颜色),红绿蓝三原色
dog_data

. . .

In [62]:

# 行,列,像素

dog_data.shape

Out[62]:

(1197, 1200, 3)

In [63]:

# uint8:无负号,0~255

dog_data.dtype

Out[63]:

dtype('uint8')

In [64]:

dog_data.max()

Out[64]:

255

In [67]:

dog2=dog_data[:,:,::-1]

dog2

解释一下:

`dog2=dog_data[:,:,::-1]` 是一个 NumPy 数组切片的操作,用于颜色通道的反转。这种操作通常用于图像处理,其中 `dog_data` 是一个三维的 NumPy 数组,表示一张彩色图像。

 `[:,:,::-1]` 表示对数组的最后一个维度(颜色通道)进行切片,步长为 `-1`,即反向切片。
 对于彩色图像,通常最后一个维度包含红、绿、蓝(RGB)三个颜色通道。
 通过 `[::-1]` 操作,将颜色通道的顺序反转为蓝、绿、红(BGR)。

In [68]:

Image.fromarray(dog2)

Out[68]:

In [71]:

  • dog_data[::5, ::5] 对数组进行切片,步长为 5,即每隔5个像素取一个值。
  • 这种操作实际上对图像进行了降采样,将图像的分辨率降低,使图像中的元素更稀疏。

Image.fromarray(dog_data[::5,::5])

简单理解:把图缩小点

Out[71]:

In [73]:

# 红绿蓝 0,1,2

# 绿红蓝 1,0,2

Image.fromarray(dog_data[:,:,[1,0,2]])

dog_data[:,:,[1,0,2]] 表示对数组的最后一个维度进行切片,其中 [1,0,2] 指定了新的颜色通道的顺序。这里的意思是将原本的颜色通道顺序(红、绿、蓝)改为新的顺序(绿、红、蓝)。

Out[73]:

改过后,小狗有点“绿”

In [75]:

Image.fromarray(dog_data[:,:,0])

Out[75]:

变成了灰度图像

In [76]:

import matplotlib.pyplot as plt

In [77]:

plt.imshow(dog_data)

Out[77]:

<matplotlib.image.AxesImage at 0x21f4d592210>

In [79]:

plt.imshow(dog_data[::-1])

Out[79]:

<matplotlib.image.AxesImage at 0x21f4db0d290>

In [83]:

plt.imshow(dog_data[::15,::15])

Out[83]:

<matplotlib.image.AxesImage at 0x21f4eaef490>

变形

使用reshape函数,注意参数是一个tuple

In [84]:

nd2

Out[84]:

array([[ 26,  85,  41,  21,  49],
       [ 27,   2,  51,  55,  34],
       [133,  78,  63,  52, 135],
       [ 26,  56,  77,  51,  13]])

In [85]:

nd2.reshape(2,10)

Out[85]:

array([[ 26,  85,  41,  21,  49,  27,   2,  51,  55,  34],
       [133,  78,  63,  52, 135,  26,  56,  77,  51,  13]])

In [87]:

dog_data.shape

Out[87]:

(1197, 1200, 3)

In [89]:

dog5=dog_data.reshape(1200,1197,3)

plt.imshow(dog5)

Out[89]:

<matplotlib.image.AxesImage at 0x21f4eb3dd90>

“小狗扭曲了”

In [90]:

# 高度0 宽度1 像素2

# 转置,行和列调整

dog6=np.transpose(dog_data,axes=(1,0,2))
plt.imshow(dog6)

Out[90]:

<matplotlib.image.AxesImage at 0x21f4ef75d10>

级联

1.np.concatenate() 级联需要注意的点: 2.级联的参数是列表:一定要加中括号或小括号 3.维度必须相同 4.形状相符 5.【重点】级联的方向默认是shape这个tuple的第一个值所代表的维度方向 6.可通过axis参数改变级联的方向

In [91]:

nd2

Out[91]:

array([[ 26,  85,  41,  21,  49],
       [ 27,   2,  51,  55,  34],
       [133,  78,  63,  52, 135],
       [ 26,  56,  77,  51,  13]])

In [92]:

np.concatenate([nd2,nd2])

Out[92]:

array([[ 26,  85,  41,  21,  49],
       [ 27,   2,  51,  55,  34],
       [133,  78,  63,  52, 135],
       [ 26,  56,  77,  51,  13],
       [ 26,  85,  41,  21,  49],
       [ 27,   2,  51,  55,  34],
       [133,  78,  63,  52, 135],
       [ 26,  56,  77,  51,  13]])

In [93]:

plt.imshow(dog_data)

Out[93]:

<matplotlib.image.AxesImage at 0x21f4edb8dd0>

In [98]:

dog7=dog_data[:,:400]

plt.imshow(dog7)

切片左边:

Out[98]:

<matplotlib.image.AxesImage at 0x21f4f00dd90>

In [99]:

dog8=dog_data[:,600:,::-1]

plt.imshow(dog8)

切片右边,再换个色

Out[99]:

<matplotlib.image.AxesImage at 0x21f4f0eb410>

In [100]:

print(dog7.shape,dog8.shape)

(1197, 400, 3) (1197, 600, 3)

In [102]:

display(dog7.shape,dog8.shape)

(1197, 400, 3)
(1197, 600, 3)

In [103]:

# 高度0 宽度1 像素2

dog9=np.concatenate([dog7,dog8],axis=1)
plt.imshow(dog9)

拼接一下:

Out[103]:

<matplotlib.image.AxesImage at 0x21f4f11dd90>

2.np.hstack与np.vstack 水平级联与垂直级联,处理自己,进行维度的变更

In [2]:

nd1=np.random.randint(0,150,size=(4,5))

In [3]:

nd2=np.random.randint(0,150,size=(2,5))

In [5]:

nd3=np.random.randint(0,150,size=(4,8))

In [6]:

display(nd1,nd2,nd3)

array([[123,  24,  86,  12,  89],
       [ 44,  13,  68,  97,  30],
       [ 35, 136,  40,  14,   2],
       [ 26, 141, 120,  12,  19]])
array([[133,  28,   1,  87, 139],
       [109,  34,  20,  44,  33]])
array([[111,  74, 126,  97,  27, 102,  54,  82],
       [ 23,  83,  81, 131,  87, 120,  78,  32],
       [ 49,  97,   0,  89,  63,  21, 122,  47],
       [144, 111, 100,  98, 129,  18, 147,  88]])

In [7]:

np.concatenate([nd1,nd3],axis=1)

#列

. . .

In [9]:

#horizontal 水平的,列数增加

np.hstack((nd1,nd3))

. . .

In [4]:

#vertical 竖直方向,行数增多

nd4=np.vstack((nd1,nd2))

切片

与级联类似,三个函数完成切片工作:

np.split

np.vsplit

np.hsplit

In [6]:

nd4.shape

Out[6]:

(6, 5)

In [7]:

np.split(nd4,3)

Out[7]:

[array([[ 64, 136, 106,  76, 137],
        [ 26,   5,  29,  90,  25]]),
 array([[136,  81, 124,  90,  19],
        [106,  24,  89,  50,  33]]),
 array([[148, 125,  94,  22,  46],
        [  5,  60,  56,  45,  40]])]

In [9]:

np.split(nd4,[1,3])

Out[9]:

[array([[ 64, 136, 106,  76, 137]]),
 array([[ 26,   5,  29,  90,  25],
        [136,  81, 124,  90,  19]]),
 array([[106,  24,  89,  50,  33],
        [148, 125,  94,  22,  46],
        [  5,  60,  56,  45,  40]])]

In [10]:

np.vsplit(nd4,2)

Out[10]:

[array([[ 64, 136, 106,  76, 137],
        [ 26,   5,  29,  90,  25],
        [136,  81, 124,  90,  19]]),
 array([[106,  24,  89,  50,  33],
        [148, 125,  94,  22,  46],
        [  5,  60,  56,  45,  40]])]

In [16]:

np.hsplit(nd4,[2])

Out[16]:

[array([[ 64, 136],
        [ 26,   5],
        [136,  81],
        [106,  24],
        [148, 125],
        [  5,  60]]),
 array([[106,  76, 137],
        [ 29,  90,  25],
        [124,  90,  19],
        [ 89,  50,  33],
        [ 94,  22,  46],
        [ 56,  45,  40]])]

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

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

相关文章

小程序基础库与Android之间通信优化的可能

最近在学习graalvm&#xff0c;发现有一个graaljs项目&#xff0c;项目中介绍可以让java与JavaScript做数据转换&#xff0c;比如JavaScript中可以使用java的数据类型与结构。突然想到之前遇到的一个问题&#xff0c;小程序中开发的代码和基础库的部分代码都是j2v8来执行的&…

易安联参与制定的《面向云计算的零信任体系》行业标准即将实施

中华人民共和国工业和信息化部公告2023年第38号文件正式发布行业标准&#xff1a;YD/T 4598.2-2023《面向云计算的零信任体系 第2部分&#xff1a;关键能力要求》及YD/T 4598.3-2023《面向云计算的零信任体系 第3部分&#xff1a;安全访问服务边缘能力要求》&#xff0c;并于20…

如何将ArcGIS工程文件迁移到ArcGIS Pro内

当你刚接触ArcGIS Pro的时候&#xff0c;尝试新建一个工程文件会发现工程文件的后缀已经改变&#xff0c;那么以前在ArcGIS内辛苦制作的工程文件是否就不能在ArcGIS Pro内使用了&#xff0c;答案是否定的&#xff0c;对此Esri也给出了解决方案&#xff0c;这里为大家介绍一下迁…

数字化校园实验室综合管理平台|推动实验室创新发展新引擎

一、数字化建设目标 实验室数字化指的是运用新一代的人工智能、大数据、互联网技术、物联网技术、云计算技术、人体感应技术、语音技术、生物识别技术、手机APP等技术&#xff0c;实现各个业务间数据流和任务流的互通互联&#xff0c;将实验室管理过程中涉及的对象&#xff0c…

vue2 el-table行悬停时弹出提示信息el-popover

实现方法&#xff0c;用到了cell-mouse-enter、cell-mouse-leave两个事件&#xff0c;然后在表格的首列字段中&#xff0c;加个el-popover组件&#xff0c;当然你也可以选择在其他字段的位置来显示提示框&#xff0c;看自己的需求了。 示例代码&#xff1a; <el-table cell…

GLES学习笔记---立方体贴图(一张图)

一、首先看一张效果图 立方体贴图 二、纹理坐标划分 如上图是一张2D纹理&#xff0c;我们需要将这个2D纹理贴到立方体上&#xff0c;立方体有6个面&#xff0c;所以上面的2D图分成了6个面&#xff0c;共有14个纹理坐标 三、立方体 上边的立方体一共8个顶点坐标&#xff0c;范围…

Web3社交治理:用户参与决策的新模式

Web3时代的到来不仅仅带来了区块链技术的创新&#xff0c;还为社交治理带来了全新的模式。传统社交平台上的决策权通常集中在平台的运营方&#xff0c;而Web3社交治理的兴起意味着用户能够更直接地参与到社交平台的决策过程中。本文将深入探讨Web3社交治理的背景、工作原理以及…

9.云原生存储之ceph在k8s中应用及问题处理

文章目录 ceph应用场景ceph应用在k8s集群外使用块设备ceph客户端配置创建块挂载使用删除pool 在k8s集群内使用块设备创建块池和StorageClass使用存储 块存储映射问题处理问题现象事件分析csi-rbdplugin pod日志分析问题小结CentOS 7 编译安装 nbd 模块nbd内核模块介绍安装 nbd …

1.5计算机网络的分类

1.5计算机网络的分类 1.5.1按照网络的作用范围进行分类 1、广域网WAN 广域网WAN&#xff08;WideAreaNetwork&#xff09;&#xff1a;广域网的作用范围通常为几十到几千公里&#xff0c;因而有时也称为远程网(longhaulnetwork)。广域网是互联网的核心部分&#xff0c;其任务…

Linux单主机模拟测试docker macvlan网络

在单台宿主机上使用Linux Bridge&#xff0c;桥接不同网络命名空间&#xff08;namespace&#xff09;的方式&#xff0c;模拟测试docker macvlan网络&#xff0c;记录如下&#xff1a; 参考 链接: Macvlan network driver链接: Docker 网络模型之 macvlan 详解&#xff0c;图…

基于JavaWeb+BS架构+SpringBoot+Vue“共享书角”图书借还管理系统系统的设计和实现

基于JavaWebBS架构SpringBootVue“共享书角”图书借还管理系统系统的设计和实现 文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 文末获取源码 Lun文目录 第1章 概 述 5 1.1 开发背景及研究意义 5 1.2 国内外研究…

数字信号处理实验---LSI系统的分析 Matlab代码

1.试用Matlab计算其幅频特性和相频特性&#xff0c;并绘图。 代码&#xff1a; n 0:10; %定义采样点n w [0:1:500]*2*pi/500; % [0,pi]轴被分成1002个点 x1 power(0.9*exp(1i*pi/3),n); %定义输入序列 x2 exp(-1i*n); %定义一个系统的冲激响应 x zeros(1,length(w))…

ESP32S3+HX8347+RGB运行LVGL例程

之前用3线SPI驱动的HX8347屏其实是一个RGB屏&#xff0c;SPI只是用来给RGB屏幕的做配置的&#xff0c;当然也可以用来驱动屏幕&#xff0c;但是3线SPI驱动能力终究有限。本文谈一下用RGB方式来驱动。 RGB接线比较多&#xff0c;为此做了个转接板&#xff1a; 一、源码 1、scre…

Swoft - Bean

一、Bean 在 Swoft 中&#xff0c;一个 Bean 就是一个类的一个对象实例。 它(Bean)是通过容器来存放和管理整个生命周期的。 最直观的感受就是省去了频繁new的过程&#xff0c;节省了资源的开销。 二、Bean的使用 1、创建Bean 在【gateway/app/Http/Controller】下新建一个名为…

Kotlin-变量定义,与类型

Kotlin-变量定义 变量定义整型浮点型字符型整型之间的转换Boolean类型Null安全安全调用Elvis运算 字符串 变量定义 Kotlin可以定义的时候不标明数据的数据类型&#xff0c;编译器会根据初始值确定类型 fun main() {var b:Intvar name "crazyit.org"//声名变量的时…

ptaR7-5打探基priority_queue的使用

题目 最近乐乐开发出了一款新的游戏《打探基》&#xff0c;这款游戏需要多人配合来玩&#xff0c;至少三个游戏玩家同时出招才能使探基的血量下降一点&#xff0c;同时&#xff0c;出招的每个人战斗力下降一点&#xff0c;当战斗力小于10的时候将不能再出招&#xff0c;不知道…

系分笔记计算机网络功能、分类和部署

文章目录 1、概述2、计算机网络的功能3、计算机网络的部署结构4、计算机网络的分类4、总结 1、概述 计算机网络是系统分析师常考查的知识点&#xff0c;虽然不是专业的网络考试&#xff0c;但是网络常识是每一个考生需要掌握的。 2、计算机网络的功能 计算机网络是计算机技术与…

计算机毕业设计 基于SpringBoot的物资综合管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

uniapp打包h5部署到服务器

在学习uniapp&#xff0c;部署前后端分离项目。将h5的dist文件打包好后一直在考虑如何通过nginx反向代理到后端接口&#xff0c;整了半天也没整成。最后才发现&#xff0c;uniapp打包的h5页面包好像不需要反向代理到后端接口&#xff0c;只需要通过nginx将dist下的h5包代理了&a…

【AI】AI和医疗大数据(2/3)

目录 四、医疗大数据理论和技术 五、非结构化处理的重要性和方法 5.1 采集技术 5.2 处理技术 5.3 存储技术 5.4 关于Mapreduce 四、医疗大数据理论和技术 医疗大数据的理论和技术主要包括以下几个方面&#xff1a; 数据整合管理技术&#xff1a;这包括多源医疗大数据的语…