首页 > 编程语言 >Python数据分析(一)--Numpy学习

Python数据分析(一)--Numpy学习

时间:2022-12-02 21:23:45浏览次数:48  
标签:Python Image -- im 数组 np import Numpy

Numpy学习

1 .数据的维度

1.1 一维数据

一维数据由对等关系的有序或无序数据构成,采用线性方式组织。对应列表(有序)、数组和集合(无序)等类型。

例子:列表和数组

  • 相同点 : 都是一组数据的有序结构
  • 区别:

image-20221129093712291

1.2 二维数据

二维数据由多个一维数据构成,是一维数据的组合形式。表格是典型的二维数据,对应列表类型来表示。

image-20221129094715911


2.Numpy的数据对象ndarry

2.1 为什么要引入一个数组对象,列表不行吗?

  • 数组对象可以去掉元素间运算所需的循环,使得一维向量更像单个数据
  • 设置专门的数组对象,经过优化,可以提升这类应用的运算速度
  • 数组对象采用相同的数据类型,有助于节省运算和存储空间

在numpy中,我们不再以单个数据为基本单位运算,而是以数组为基本单位运算。在右图中我们可以发现numpy中不再使用for循环。

image-20221129095656412

2.1 ndarry对象的构成

ndarry是一个多维数组对象,由两部分构成

  • 实际的数据
  • 描述这些数据的元数据(数据维度、数据类型等)

案例:ipython新建一个数组类型

image-20221129100948139

数据的描述项:包括最大值,最小值,维度,元素类型,元素对象的个数等

image-20221129101040385

可视化

image-20221129101235132

2.3 ndarray对象的属性

image-20221129101355789

案例:ipython中输出数组对象的属性

image-20221129101630156

2.4 ndarray数组的创建

(1) 从Python中的列表、元组等类型创建ndarray数组

x = np.array(list/tuple)
x = np.array(list/tuple,dtype = np.float32)
当np.array()不指定dtype时,Numpy将根据数据情况关联一个dtype类型

(2)使用Numpy中函数创建ndarray数组,如arange,ones,zeros等

image-20221129110847662

image-20221129112444783

image-20221129111651696

image-20221129111720922

np.linspace(begin,end,size,endpoint) :参数begin代表开始元素,end代表结束元素,size代表数组元素个数,endpoint为False表示end不作为数组的最后一个元素出现,数组要再多分一份出来

image-20221129112338934

2.5 ndarray数组的变换

(1) numpy数组的维度变换

image-20221129112939944

注意reshape和resize的区别:

  • 两个都可以变换维度,但是保证变换前后数组元素个数相同
  • reshape进行维度变换后,并不改变原数组

image-20221129152621832

  • resize进行维度变换后,原数组也进行修改

image-20221129152703357

使用flatten()对数组进行降维,且原数组不变

image-20221129152953609


(2) ndarray数组的类型变换

方法:new_a = a.astype(new_type)

注意:astype()方法一定会创建新的数组(原始数据的一个拷贝),即使两个类型一致

通过id可以发现使用astype方法,即使类型一致,也会在内存区域新开辟一块空间(id不同)

image-20221129154039754

(3) ndarray数组向列表的转换

方法:Is = a.tolist()

image-20221129161420788

2.6 numpy数组的操作

(1) 数组的索引与切片

  • 一维数组的索引与切片

image-20221129162404887

  • 多维数组的索引

注意负数的索引代表从右往左数,-1代表第一个元素,-2代表第二个元素

image-20221129162840530

  • 多维数组的切片

image-20221129163226433

image-20221129163243255

2.7 numpy数组的运算

  • 数组与标量之间的运算作用于数组的每一个元素

image-20221129163956741

Numpy一元函数:对ndarray中的数据执行元素级运算的函数

注意:ceil是向上取整,而floor是向下取整

image-20221129164216928

image-20221129165207178

image-20221129165550148


Numpy二元函数

image-20221129165729637

3.数据的CSV文件读取

3.1 CSV文件存储

image-20221129202353508

案例:

image-20221129202508016

image-20221129203045476

3.2 CSV文件读入

image-20221129203335853

image-20221129203459194

image-20221129203754229

3.3 CSV文件的局限性

  • CSV只能有效存储一维和二维数组
  • np.savetxt()和np.loadtxt()只能有效存取一维和二维数组

3.4 多维数据的存取

image-20221129204256691

image-20221129204525364

image-20221129205928326

Numpy的便捷文件读取

image-20221129210932717

image-20221129211120636

我们打开a.npy可以发现,该文件是以二进制形势存储的,在第一行文件以显式的方式将数组的源信息呈现了出来

image-20221129211443386

4.Numpy的随机数函数

4.1 基本使用

image-20221129215436413

rand(): 其中参数是维度,创建的数据时浮点数

image-20221129215635015

randn():其中参数是维度,但是数据分布是标准正态分布

image-20221129215818618

randint(low,high,shape):参数除了维度,还可以限定数据的范围

image-20221129215930838

seed(s) : 通过设置相同的随机数种子s,我们可以得到相同的随机数数组

image-20221129220030110

4.2 高级使用

image-20221129220259998

shuffle(a):对最外维进行随机排列,改变原来数组的数据

image-20221129220713966

permutation(a):在最外维产生一个乱序数组,但不改变原数组

image-20221129220852901

choice(a,size,replace,p):表示从一维数组a中以概率p抽取元素,形成size形状新数组,replace表示是否可以重用元素,默认为False

image-20221129221026190

4.3 分布函数

image-20221129230053666

image-20221129230215577

5. Numpy的统计函数

image-20221130105826622

对于mean()函数的参数axis

  • axis = 0:压缩行,对各列求均值,返回1*n的矩阵
  • axis = 1: 压缩列,对各行求均值,返回m*1的矩阵

对于average()的参数weights

  • 对定轴axis的各位置元素赋予对应的权值,是一个列表
  • 加权平均的计算:各位置元素*对应的元素/(权值之和)

image-20221130111531228

image-20221130111755058

6. Numpy的梯度函数

image-20221130155717640

image-20221130160039787

7. 图像的数组表示

image-20221130160801306

from PIL import Image
import numpy as np

im = np.array(Image.open("D:\\Code\\Python\\PyTorch\\Data_analyze\\sun.jpg"))
print(im.shape, im.dtype)

(1281, 1280, 3) uint8

可以看到,图像是一个三维数组,维度分别是高度、宽度和像素RGB值。

8.图像的变换

既然图像可以用数组表示,数组又可以进行运算,运算后的数组就可以改变图像的形状。

步骤:

  1. 读入图像。
  2. 获得像素RGB值。
  3. 修改后保存为新的文件。

例一:图像色彩取反

import numpy as np
from PIL import Image
a = np.array(Image.open("D:\Code\Python\PyTorch\Data_analyze\sun.jpg"))
print(a.shape,a.dtype)
(1281, 1280, 3) uint8
b = [255,255,255]-a  #求图像的补值
im = Image.fromarray(b.astype('uint8'))  #生成图像文件
im.save("D:\Code\Python\PyTorch\Data_analyze\sun1.jpg") #保存新文件

image-20221130173656531

例二:图像灰度化

.convert(‘L’)是将图片变成灰色,此时图像不是一个三维数组,而是一个二维数组。由下图输出可以看到灰度图已经没有rgb这一维了

image-20221130173928519

import numpy as np
from PIL import Image
a = np.array(Image.open("C:/Users/Administrator/Pictures/timg1.jpg").convert('L'))
b = 255 - a #对灰度值取反,得到一个新数组b
im = Image.fromarray(b.astype('uint8'))
im.save("C:/Users/Administrator/Pictures/timg3.jpg")

image-20221130193855404

例三:图片变灰效果淡

import numpy as np
from PIL import Image
a = np.array(Image.open("C:/Users/Administrator/Pictures/timg1.jpg").convert('L'))
c = (100/255)*a+150 #区间变换
im = Image.fromarray(b.astype('uint8'))
im.save("C:/Users/Administrator/Pictures/timg4.jpg")

image-20221130194639413

例四:图片变灰效果深

import numpy as np
from PIL import Image
a = np.array(Image.open("C:/Users/Administrator/Pictures/timg1.jpg").convert('L'))
d = 255*(a/255)**2 #像素平方
im = Image.fromarray(b.astype('uint8'))
im.save("C:/Users/Administrator/Pictures/timg5.jpg")

image-20221130195422089


标签:Python,Image,--,im,数组,np,import,Numpy
From: https://www.cnblogs.com/epochal/p/numpy.html

相关文章

  • Java 使用baksmali.jar及smali.jar反编译classes.dex
    smali/baksmali是dalvik(Android的JavaVM实现)使用的dex格式的汇编/反汇编程序。该语法松散地基于Jasmin的/dedexer的语法,并支持dex格式的全部功能(注释、调试信息、行信......
  • 杭州集训D4T1
    题目简述给定一个大小为\(n\left(n\le10^5\right)\)的环,每个点初始为白色,每一步在所有点中均匀随机选择一个,将其染黑(已经黑则不变);然后对于所有白点,如果其左右都是黑色,那......
  • 常用的正则表达式总结
    非负整数:^\d+$正整数:^[0-9]*[1-9][0-9]*$非正整数:^((-\d+)|(0+))$负整数:^-[0-9]*[1-9][0-9]*$整数:^-?\d+$非负浮点数:^\d+(\.\d+)?$正浮点数:^((0-9)+\.[0-9]*[1-9]......
  • 约数个数
    sloj #P4001.约数个数题目描述给出整数x,求它的约数个数为了加大难度,有m次询问,将每次询问的答案求和然后mod109+7输入格式第一行是一个整数m第二行是整数q1,a,b,cq......
  • P8742 [蓝桥杯 2021 省 AB] 砝码称重 题解
    题目分析原题链接P8742[蓝桥杯2021省AB]砝码称重由这道题,我们不难联想到P2347砝码称重,两题的做法是相似的。因此这道题做法就是背包。其本质上都是选取砝码,求能......
  • 2022.11.10 模拟赛小结
    2022.11.10模拟赛小结目录2022.11.10模拟赛小结更好的阅读体验戳此进入赛时思路T1CodeT2T3T4Code正解T2T3T4CodeUPD更好的阅读体验戳此进入赛时思路T1原题LG-P3970......
  • LG-P4264 [USACO18FEB]Teleportation S 题解
    LG-P4264[USACO18FEB]TeleportationSSolution目录LG-P4264[USACO18FEB]TeleportationSSolution更好的阅读体验戳此进入题面SolutionCodeUPD更好的阅读体验戳此进入......
  • 2022-2023-1 20221421 《计算机基础与程序设计》第十四周学习总结
    作业信息班级链接:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK14作业正文:2022-2023-120221312......
  • 监控Windows(生成php木马)
    sudosu生成木马:msfvenom--platformphp-pphp/meterpreter/reverse_tcplhost=192.168.1.9lport=55555R>web.php执行监控:msfconsoleuseexploit/multi/handlers......
  • Python+NumPy绘制常见曲线的方法详解_python
    一、利萨茹曲线二、计算斐波那契数列 三、方波方波可以近似表示为多个正弦波的叠加。任意一个方波信号都可以用无穷傅里叶级数来表示。需要累加很多项级数,且级数越......