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

文章接上篇:

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]])]

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

雪花代码-html版

雪花代码 动画效果 代码 <!DOCTYPE html><html><head><style>body {background-color: #000000;}.snowflake {position: absolute;font-size: 10px;color: #FFFFFF;text-shadow: 1px 1px 1px #000000;user-select: none;}</style></head>…

008-关于FPGA/ZYNQ直接处理图像传感器数据输出的若干笔记(裸板采集思路)

文章目录 前言一、图像传感器厂商二、图像传感器的参数解析三、图像传感器中的全局曝光和卷帘曝光四、处理传感器图像数据流程1.研究当前图像传感器输出格式2.FPGA处理图像数据 总结 前言 最近也是未来需要考虑做的一件事情是&#xff0c;如何通过FPGA/ZYNQ去做显微镜图像观测…

大数据Doris(五十四):SQL函数之日期函数(二)

文章目录 SQL函数之日期函数(二) 一、DAYOFMONTH(DATETIME date) 二、dayofweek(DATETIME date)

基于ssm社区老年人关怀服务系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本社区老年人关怀服务系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数…

题目:七段码(蓝桥OJ 595)

问题描述&#xff1a; 解题思路&#xff1a; 枚举每一种可能组合&#xff08;可以使用二进制数表示&#xff0c;每一个二进制就是一种组合&#xff09;&#xff0c;在判断是否符合题目要求的每一个发光灯管相邻&#xff08;使用并查集方法确定&#xff0c;当每一个发光…

vue2中关于elementUI的自定义上传

一、项目背景 在项目中采用了admin模板&#xff0c;和elementUI组件。需求为手动选择文件可多选上传并显示图片 效果图为 二、自定义上传中遇到的问题 http-request覆盖默认的上传行为&#xff0c;可以自定义上传的实现function—— 在文档中存在这样一个自定义上传&#…

代码随想录day25 回溯算法加强练习

216.组合总和III 题目 找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数&#xff0c;并且每种组合中不存在重复的数字。 说明&#xff1a; 所有数字都是正整数。解集不能包含重复的组合。 示例 1: 输入: k 3, n 7 输出: [[1,2,4]] 示例 2: 输入…

jmeter分布式服务搭建

目录 一、环境准备 二、 安装包下载 三 、安装jdk 四 、控制机安装 4.1 解压压缩包 4.2 修改 bin/jmeter.properties 4.3 修改 bin/system.properties 五、执行机安装 5.1 解压安装包 5.2 修改 bin/jmeter.properties 5.3 修改 bin/system.properties 5.4 启动执行机 …

便捷好用的iOS文件管理App

便捷好用的iOS文件管理App 摘要 本文介绍了一款功能强大、免费的iOS文件管理App——克魔助手。通过使用克魔助手&#xff0c;用户可以轻松管理手机存储空间&#xff0c;清理垃圾文件&#xff0c;整理文件&#xff0c;并进行文件传输和截图操作。本文将详细介绍克魔助手的各项…

linux部署apache服务部署静态网站

第一步&#xff1a;配置IP地址 第二步&#xff1a;创建挂载点 配置yum仓库 mkdir -p /media/cdrom 挂载 mount /dev/cdrom /media/cdrom 安装服务 安装yum源 启用httpd服务程序并将其加入到开机启动项中 建立网站数据保存目录&#xff0c;并创建首页文件 mkdir /home/wwwroo…

OpenHarmony4.0适配LVDS屏幕驱动

1.概述 手头有一块RK3568的开发板OK3568-C&#xff0c;但是还没有适配OpenHarmony&#xff0c;用的还是LVDS屏幕&#xff0c;但是官方和网上好像还没有OpenHarmony4.0的LVDS屏幕驱动的通用实现&#xff0c;所以决定尝试了一下适配该开发板&#xff0c;完成LVDS屏幕驱动的适配&…

yapi无法注册解决,使用yapi pro即可注册,接口文档生成,java,json

1.气屎我了&#xff0c;直接用yapi pro就可以用&#xff0c;害的我弄了半天 2.地址&#xff1a;https://yapi.pro/login 3.yapi pro比较卡顿。开启无痕模式轻松解决该问题&#xff08;手动狗头&#xff09;祝你开启新大陆 yapi pro yapi

京东年度数据报告-2023全年度笔记本十大热门品牌销量(销额)榜单

2023年度&#xff0c;在电脑办公市场整体销售下滑的环境下&#xff0c;笔记本市场的整体销售也不景气。 根据鲸参谋平台的数据显示&#xff0c;京东平台上笔记本的年度销量为650万&#xff0c;同比下滑约16%&#xff1b;销售额约为330亿&#xff0c;同比下滑约19%。同时&#…

Kotlin程序设计(三)高级用法

Kotlin程序设计高级篇 在学习了前面的内容之后&#xff0c;相信各位小伙伴应该对Kotlin这门语言有了一些全新的认识&#xff0c;我们已经了解了大部分的基本内容&#xff0c;从本章开始&#xff0c;就是对我们之前所学的基本内容的进一步提升。 泛型 在前面我们学习了最重要…

社交通证经济学:Web3时代的社交奖励系统

Web3时代的到来带来了区块链技术和去中心化的新范式&#xff0c;社交媒体也在这场变革中经历着深刻的改变。 社交通证经济学作为Web3时代社交媒体的创新实践&#xff0c;重新定义了用户在平台上的价值和奖励体系。本文将深入探讨Web3时代社交通证经济学的背景、工作原理以及对…

律师小程序,在线咨询,在线问答小程序修复头像

应用介绍 演示前端小程序&#xff1a; #小程序://问卜易学咨询/cVtT0ndctaecDKd 律师小程序是一种智能化的服务平台&#xff0c;提供了多种有益的功能。首先&#xff0c;它能够实现在线法律咨询&#xff0c;用户可以通过文字、语音或视频与律师实时沟通&#xff0c;获得专业意见…

个人事务备忘录管理微信小程序

介绍 UniApp是一款使用Vue.js开发所有前端应用的框架&#xff0c;能够同时在iOS、Android、H5、小程序等多个平台上运行&#xff1b;所以本系统可以是一个安卓app&#xff0c;也可以是微信小程序 系统包括以下功能&#xff1a; 备忘录 管理个人事务 记事本 事务分类 日记编写…

GO自研微服务框架-路由实现

路由实现 1.不用框架 不用框架的路由实现 package mainimport ("fmt""log""net/http" )func main() {http.HandleFunc("/hello", func(writer http.ResponseWriter, request *http.Request) {fmt.Fprintf(writer, "%s 欢迎来到…

白嫖啦,微软面向初学者的机器学习课程

网址&#xff1a; https://microsoft.github.io/ML-For-Beginners/#/ Microsoft 提供了一个名为 "Machine Learning for Beginners" 的课程&#xff0c;这是一个为期12周、包含26节课的课程&#xff0c;旨在帮助初学者了解机器学习的基本概念。这个课程由 Azure Clou…

全网最细RocketMQ源码二:Producer

入口 这里分析源码用的入口是&#xff1a; org.apache.rocketmq.example.quickstart package org.apache.rocketmq.example.quickstart;public class Producer {public static void main(String[] args) throws MQClientException, InterruptedException {/** Instantiate wi…