Python可视化数据分析04、NumPy库使用

举报
红目香薰 发表于 2022/07/29 10:32:55 2022/07/29
【摘要】 ​  ​编辑Python可视化数据分析04、NumPy库使用📋前言📋💝博客:【红目香薰的博客_CSDN博客-计算机理论,2022年蓝桥杯,MySQL领域博主】💝✍本文由在下【红目香薰】原创,首发于CSDN✍🤗2022年最大愿望:【服务百万技术人次】🤗💝Python初始环境地址:【Python可视化数据分析01、python环境搭建】💝 环境需求环境:win10开发工具:PyC...

  编辑

Python可视化数据分析04、NumPy库使用

📋前言📋

💝博客:【红目香薰的博客_CSDN博客-计算机理论,2022年蓝桥杯,MySQL领域博主】💝

✍本文由在下【红目香薰】原创,首发于CSDN✍

🤗2022年最大愿望:【服务百万技术人次】🤗

💝Python初始环境地址:【Python可视化数据分析01、python环境搭建】💝 


环境需求

环境:win10

开发工具:PyCharm Community Edition 2021.2

数据库:MySQL5.6

目录

Python可视化数据分析04、NumPy库使用

📋前言📋

环境需求


NumPy概述

安装NumPy

 ​编辑 

Ndarray对象

创建Ndarray对象

Demo1:基础操作

Demo2:数据类型对象dtype

NymPy数组

NumPy高级索引

数组索引:

布尔索引:

花式索引:

NumPy广播

NumPy迭代器对象

NumPy字符串函数

SciPy介绍

保存MATLAB文件

scipy. spatial模块



NumPy概述

NumPy(Numerical Python)是Python语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
NumPy通常与SciPy【saipai】(Scientific Python)和Matplotlib(绘图库)一起使用。SciPy是一个开源的Python算法库和数学工具包。Matplotlib是Python编程语言及其数值数学扩展包NumPy的可视化操作界面。主要用于数学、科学和工程计算。

安装NumPy

pip3 install numpy

 编辑 

网络慢的话就换镜像地址

pip3 config set global.index-url https://repo.huaweicloud.com/repository/pypi/simple
pip3 config list

Ndarray对象

Ndarray对象是用于存放同类型元素的多维数组,每个元素在内存中都有相同存储大小的区域。

Ndarray对象由以下内容组成:

  •  一个指向数据(内存或内存映射文件中的一块数据)的指针。
  • 数据类型或dtype,描述在数组中的固定大小值的格子。
  • 一个表示数组形状(shape)的元组,表示各维度大小的元组。
  • 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要跨过的字节数 

创建Ndarray对象

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

object:数组或嵌套的数列。
dtype:数组元素的数据类型,可选。
copy:对象是否需要复制,可选。
order:创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)。
subok:默认返回一个与基类类型一致的数组。
ndmin:指定生成数组的最小维度。

Demo1:基础操作

import numpy as np

a = np.array([1, 2, 3])
print("基础数组:")
print(a)
# 大于一个维度
a = np.array([[1, 2], [3, 4]])
print("二维数组:")
print(a)
# 设置最小维度
a = np.array([1, 2, 3, 4, 5], ndmin=30)
print("设置最小数组层:")
print(a)

 编辑 

Demo2:数据类型对象dtype

类型 字符代码
bool ?, b1
int8 b, i1
uint8 B, u1
int16 h, i2
uint16 H, u2
int32 i, i4
uint32 I, u4
int64 q, i8
uint64 Q, u8
float16 f2, e
float32 f4, f
float64 f8, d
complex64 F4, F
complex128 F8, D
str

a, S(可以在S后面添加数字,表示字符串长度,

比如S3表示长度为三的字符串,不写则为最大长度)

unicode U
object O
void V
import numpy as np

dt = np.dtype('i1')  # int8, int16, int32, int64四种数据类型可以使用 'i1', 'i2','i4','i8' 代替
print(dt)
dt = np.dtype('<i1')  # 字节顺序标注
print(dt)
dt = np.dtype([('age', np.int8)])  # 创建结构化数据类型
print(dt)
dt = np.dtype([('age', np.int8)])  # 将数据类型应用于ndarray对象
a = np.array([(10,), (20,), (30,)], dtype=dt)
print(a)
dt = np.dtype([('age', np.int8)])  # 类型字段名可以用于存取实际的age列
a = np.array([(10,), (20,), (30,)], dtype=dt)
print(a['age'])
# 结构化数据类型student,包含字符串字段name(大写字母O,代表Object类型),整数字段age,及浮点字段marks
student = np.dtype([('name', 'O'), ('age', 'i4'), ('marks', 'f4')])
print(student)
a = np.array([("文争鸣", 21, 50), ("祝枝山", 18, 75)], dtype=student)
print(a)

 编辑 

NymPy数组

NumPy数组的维数称为秩(zhì)(rank),一维数组的秩为1,二维数组的秩为2,以此类推。
在NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions)。而轴的数量——秩,就是数组的维数。

 编辑 

属性

说明

ndarray.ndim

秩,即轴的数量或维度的数量

ndarray.shape

数组的维度,对于矩阵,即为nm

ndarray.size

数组元素的总个数,相当于.shapen*m的值

ndarray.dtype

ndarray对象的元素类型

ndarray.itemsize

ndarray对象中每个元素的大小,以字节为单位

ndarray.flags

ndarray对象的内存信息

ndarray.real

ndarray元素的实部

ndarray.imag

ndarray元素的虚部

ndarray.data

包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,

所以通常不需要使用这个属性。

示例1:

import numpy as np

a = np.arange(24)
print("一维一值", a.ndim)  # a只有一个维度
b = a.reshape(2, 4, 3)  # 现在调整其大小,b拥有三个维度
print("一维三值", b.ndim)
a = np.array([[1, 2, 3], [4, 5, 6]])  # 数组的维度
print("二维,三值", a.shape)
a = np.array([[1, 2, 3], [4, 5, 6]])  # 调整数组大小
a.shape = (3, 2)
print("三维二值", a)
a = np.array([[1, 2, 3], [4, 5, 6]])
b = a.reshape(3, 2)  # reshape 函数来调整数组大小
print("三维二值", b)
# 以字节的形式返回数组中每一个元素的大小
x = np.array([1, 2, 3, 4, 5], dtype=np.int8)  # 数组的dtype为 int8(一个字节)
print("所占用字节长度:", x.itemsize)
y = np.array([1, 2, 3, 4, 5], dtype=np.float64)  # 数组的 dtype为float64(8个字节)
print("所占用字节长度:", y.itemsize)

  编辑  

示例2:

import numpy as np

x = np.empty([3, 2], dtype=int)  # empty 方法使用
print("随机", x)
x = np.zeros(5)  # 默认为浮点数
print("空浮点数", x)
y = np.zeros((5,), dtype=np.int32)  # 设置类型为整数
print("空整数", y)
# 自定义类型
z = np.zeros((2, 2), dtype=[('x', 'i4'), ('y', 'i4')])
print("俩二维数组,长度是2", z)
x = np.ones(5)  # 默认为浮点数
print("长度5的浮点数", x)
# 自定义类型
x = np.ones([2, 2], dtype=int)
print("一个二维数组,值是2个:", x)

编辑

示例3:

import numpy as np

a = np.arange(5, 15)  # 10个数
print(a)  # 打印5-14
s = slice(2, 7, 2)  # 从索引2开始到索引7停止,间隔为2
print(a[s])
a = np.arange(5, 15)  # 10个数
print(a[2:7:2])  # 从索引2开始到索引7停止,间隔为2
a = np.arange(5, 15)  # 10个数
print("下标是五:", a[5])
a = np.arange(5, 15)  # 10个数
print(a[2:])  # 从下标是2开始打印
a = np.arange(5, 15)  # 10个数
print("从下标2打印到下标5:", a[2:5])
print(np.array([[1, 2, 3], [3, 4, 5], [4, 5, 6]]))
print('从数组索引 a[1:] 处开始切割')
print(a[1:])
a = np.array([[1, 2, 3], [3, 4, 5], [4, 5, 6]])
print(a[..., 1])  # 第2列元素
print(a[1, ...])  # 第2行元素
print(a[..., 1:])  # 第2列及剩下的所有元素

  

编辑

NumPy高级索引

除了对Ndarray数组进行切片操作和索引操作,还可以对Ndarray数组进行整数数组索引、布尔索引及花式索引。

数组索引:

import numpy as np

x = np.array([[1, 2], [3, 4], [5, 6]])
y = x[[0, 1, 2], [0, 1, 0]]
print(y)
# 4X3 数组中的四个角的元素。行索引是[0,0]和[3,3],而列索引是[0,2]和[0,2]
x = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]])
print('我们的数组是:')
print(x)
print('\n')
rows = np.array([[0, 0], [3, 3]])
cols = np.array([[0, 2], [0, 2]])
y = x[rows, cols]
print('这个数组的四个角元素是:')
print(y)

 编辑 

布尔索引:

import numpy as np
x = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]])
print('我们的数组是:')
print(x)
# 现在打印出大于5的元素
print('大于5的元素是:')
print(x[x > 5])

编辑

花式索引:

import numpy as np

x = np.arange(32).reshape((8, 4))  # 传入顺序索引数组
print(x[[4, 2, 1, 7]])
print('\n')
x = np.arange(32).reshape((8, 4))  # 传入倒序索引数组
print(x[[-4, -2, -1, -7]])
print('\n')
x = np.arange(32).reshape((8, 4))  # 传入多个索引数组
print(x[np.ix_([1, 5, 7, 2], [0, 3, 1, 2])])

编辑

NumPy广播

import numpy as np

a = np.array([1, 2, 3, 4])
b = np.array([10, 20, 30, 40])
print(a * b, '\n')
# 当运算中的2个数组的形状不同时,numpy将自动触发广播机制
a = np.array([[0, 0, 0],
              [10, 10, 10],
              [20, 20, 20],
              [30, 30, 30]])
b = np.array([1, 2, 3])
print(a + b, '\n')
# 4x3的二维数组与长为3的一维数组相加,等效于把数组b在二维上重复4次再运算
a = np.array([[0, 0, 0],
              [10, 10, 10],
              [20, 20, 20],
              [30, 30, 30]])
b = np.array([1, 2, 3])
bb = np.tile(b, (4, 1))
print(a + bb)

编辑

NumPy迭代器对象

控制遍历顺序
使用numpy.nditer迭代器对象可以根据需要,采用列序优先或行序优先的方式控制遍历顺序。具体说明如下:
for x in np.nditer(a, order='F'):Fortran order,列序优先。
for x in np.nditer(a.T, order='C'):C order,行序优先

F风格:

import numpy as np
a = np.arange(0, 60, 5)
a = a.reshape(3, 4)
print('原始数组是:')
print(a, '\n')
print('原始数组的转置是:')
b = a.T
print(b, '\n')
print('以 F 风格顺序排序:')
c = b.copy(order='F')
print(c)
for x in np.nditer(c):
    print(x, end=", ")

编辑

C风格:

import numpy as np
a = np.arange(0, 60, 5)
a = a.reshape(3, 4)
print('原始数组是:')
print(a, '\n')
print('原始数组的转置是:')
b = a.T
print(b, '\n')
print('以 C 风格顺序排序:')
c = b.copy(order='C')
print(c)
for x in np.nditer(c):
    print(x, end=", ")

 编辑 

修改数组值:

import numpy as np

a = np.arange(0, 60, 5)
a = a.reshape(3, 4)
print('原始数组是:')
print(a, '\n')
for x in np.nditer(a, op_flags=['readwrite']):
    x[...] = 2 * x
print('修改后的数组是:\n', a)

编辑

NumPy字符串函数

NumPy中有专门处理字符串的函数,这些函数包含在numpy.char中。
NumPy字符串的函数的说明见下表:

函数

描述

add()

对两个数组的逐个字符串元素进行连接

multiply()

返回按元素多重连接后的字符串

center()

居中字符串,并使用指定字符在左侧和右侧进行填充

capitalize()

将字符串第一个字母转换为大写

title()

将字符串的每个单词的第一个字母转换为大写

lower()

数组元素转换为小写,它对每个元素调用str.lower()函数

upper()

数组元素转换为大写,它对每个元素调用str.upper()函数

split()

指定分隔符对字符串进行分割,并返回数组列表。默认情况下,分隔符为空格

splitlines()

返回元素中的行列表,以换行符分割

strip()

移除元素开头或者结尾处的特定字符

join()

通过指定分隔符来连接数组中的元素

replace()

使用新字符串替换字符串中的所有子字符串

encode()

对数组中的每个元素调用str.encode()函数。默认编码是utf-8,可以使用标准Python库中的编解码器

decode()

对编码的元素进行str.decode()解码

import numpy as np

print('连接两个字符串:')
print(np.char.add(['hello'], [' The World']))
print('连接示例:')
print(np.char.add(['hello', 'girl'], [' Hi', ' boy']))
print(np.char.multiply('幸福安康*3', 3))
print(np.char.center('幸福安康', 20, fillchar='*'))
print(np.char.capitalize('幸福安康'))
print(np.char.title('i like 幸福安康'))
print(np.char.lower(['幸福安康', 'GOOGLE']))  # 操作数组
print(np.char.lower('幸福安康'))  # 操作字符串
print(np.char.upper(['幸福安康', '和谐美满']))  # 操作数组
print(np.char.upper('幸福安康'))  # 操作字符串
print(np.char.split('i like 幸福安康?'))  # 分隔符默认为空格
print(np.char.split('www.baidu.com', sep='.'))  # 分隔符为 .
print(np.char.splitlines('i\nlike 幸福安康?'))  # 换行符 \n
print(np.char.splitlines('i\rlike 幸福安康?'))
# 移除字符串头尾的 a 字符
print(np.char.strip('ashok 幸福安康的', '的'))
# 移除数组元素头尾的 a 字符
print(np.char.strip(['幸福安康', 'admin', 'java'], 'a'))
print(np.char.join(':', '幸福安康'))  # 操作字符串
# 指定多个分隔符操作数组元素
print(np.char.join([':', '-'], ['幸福安康', '和谐美满']))
print(np.char.replace('i like 幸福安康', 'oo', 'cc'))
a = np.char.encode('幸福安康', 'utf-8')
print(a)
print(np.char.encode('幸福安康', 'utf-8'))
print(np.char.decode(a, 'utf-8'))

 编辑 

舍入函数

around()函数:返回指定数字的四舍五入值。
floor()函数:返回数字的下舍整数。
ceil()函数:返回数字的上入整数。

算术函数

add()函数:返回指定数字的加法。
subtract()函数:返回指定数字的减法。
multiply()函数:返回指定数字的乘法。
divide()函数:返回指定数字的除法。
reciprocal()函数:返回参数逐元素的倒数。
power()函数:将第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应元素的幂。
mod()函数:计算输入数组中相应元素的相除后的余数

统计函数

amin()函数:用于计算数组中的元素沿指定轴的最小值。
amax()函数:用于计算数组中的元素沿指定轴的最大值。
ptp()函数:计算数组中元素最大值与最小值的差(最大值-最小值)。
median()函数:用于计算数组中元素的中位数(中值)。
mean()函数:返回数组中元素的算术平均值。
average()函数:根据在另一个数组中给出的各自的权重计算数组中元素的加权平均值 

SciPy介绍

SciPy是一个用于数学、科学和工程领域的常用软件包,可以处理插值、积分、优化、图像处理、常微分方程数值的求解和信号处理等问题。
Numpy和SciPy协同工作,可以高效解决数据处理问题。

安装SciPy

pip3 install scipy

 编辑 

模块名

应用领域

scipy.cluster

向量计算/Kmeans

scipy.constants

物理和数学常量

scipy.fftpack

傅立叶变换

scipy.integrate

积分程序

scipy.interpolate

插值

scipy.io

数据输入输出

scipy.linalg

线性代数程序

scipy.ndimagen

维图像包

scipy.odr

正交距离回归

scipy.optimize

优化

scipy.signal

信号处理

scipy.sparse

稀疏矩阵

scipy.spatial

空间数据结构和算法

scipy.special

一些特殊的数学函数

scipy.stats

统计

保存MATLAB文件

from scipy import io as spio
import numpy as np

a = np.ones((5, 2, 7))
# 写入
spio.savemat('f.mat', {'a': a})
# 读取
data = spio.loadmat('f.mat', struct_as_record=True)
print(data['a'])

 编辑 

scipy. spatial模块

该模块的distance()函数用于计算两点之间的距离

在数学中,欧几里得距离或欧几里得度量是欧几里得空间中两点间“普通”(即直线)距离。使用这个距离,欧氏空间成为度量空间。相关联的范数称为欧几里得范数。较早的文献称之为毕达哥拉斯度量。

欧氏距离

|x| = √( x[1]2 + x[2]2 + … + x[n]2 )
from scipy.spatial.distance import cdist
import numpy as np

x1 = np.array([[1, 2]])
x2 = np.array([[4, 5]])
# 通过cdist函数,计算两个点之间的距离·欧氏距离
distance = cdist(x1, x2, "euclidean")
print(distance)

编辑

这块很多时候需要具体问题具体分析,用的时候搜索公式就行了。



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。