18. Python 数据处理之 Numpy

目录

    • 1. 简介
    • 2. 安装和导入Numpy
    • 3. ndarray 对象
    • 4. 基本运算
    • 5. 索引、切片和迭代
    • 6. 条件和布尔数组
    • 7. 变换形状
    • 8. 操作数组

1. 简介

数据分析的流程概括起来主要是:读写、处理计算、分析建模和可视化4个部分。

Numpy 是Python 进行科学计算,数据分析时,所用到的一个基础库。它是大量Python数据和科学计算包的基础,如Pandas库就用到了Numpy。

Numpy(Numerical Python)是Python的一个扩展程序库,支持大量的维度数组与矩阵运算,此外,针对数组运算也可以提供大量的数据函数库。

Numpy 是一个运行速度非常快的数学库,主要用于数组计算,包括以下方面:

  • 一个强大的N维数组对象ndarray。
  • 广播功能函数。
  • 整合C/C++/Fortran代码的工具。
  • 线性代数、傅立叶变换、随机数生成功能。

Numpy 通常与 Scipy(Scientific Python)和 Matplotlib(绘图库)一起使用,这种组合广泛用于替代MatLab,是一个强大的科学计算环境,有助于通过Python学习数据科学或者机器学习。

2. 安装和导入Numpy

安装、导入和使用Numpy:

# 安装Numpy
'''Windows 按住win+R 输入 cmd,Mac 打开Terminal
pip install numpy 
'''
import numpy as np # 导入numpy并取别名
print(np.__version__) # 如果显示版本信息,说明安装和导入成功;1.22.1
print(np.eye(3)) # 使用eye(n) 生成对角矩阵
# 输出
'''
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
'''

3. ndarray 对象

ndarray 是 Numpy 库的基础,是一种由同质元素构成的多维数组。元素数量是事先指定好的,同质指的是所有元素的类型和大小都相同。数据类型由dtype(data-type,数据类型)的Numpy对象指定。每个ndarray只有一种dtype类型。

数组的维数和元素的数量由数组的形状(shape)确定,数组的形状由N个正整数组成的元组指定,元组的每个元素对应每一维的大小。数组的维统称为轴(axes),轴的数量被称作秩(rank)。

Numpy 数组的另一个特点是大小固定,在创建数组时指定大小,然后就不再发生改变。这与Python的列表有所不同,列表的大小时可以改变的。

1) 创建ndarray对象

使用array(),通过嵌套列表或元组定义为多维数组。

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

参数说明如下:

  • object:数组或嵌套的数列。
  • dtype:数组元素的数据类型,可选。
  • copy:对象是否需要复制,可选。
  • order:创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)。
  • subok:默认返回一个与基类类型一致的数组。
  • ndmin:指定生产数组的最小维度。
import numpy as np # 导入numpy并取别名
a = np.array([1,2,3]) # 定义一维 ndarray 对象
b = np.array([[1,2],[3,4]]) # 定义多维 ndarray 对象
print(a) # 输出 [1 2 3]
print(b) 
''' 输出
[[1 2]
 [3 4]]
'''
print(b.itemsize) # 使用itemsize属性可以获取每个元素的大小(以字节为
print(b.data) # 使用data属性表示包含数组实际元素的缓冲区

使用empty()函数可以创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组。

numpy.empty(shape,dtype=float,order='C')

参数说明如下:

  • shape:数组形状。
  • dtype:数据类型,可选。
  • order:有‘C’和’F’两个选项,分别代表行优先和列优先,在计算机内存中存储元素的顺序。
import numpy as np # 导入numpy并取别名
x = np.empty([2,2],dtype=int) 
print(x)
'''输出
[[1 2]
 [3 4]]
'''

使用zeros(),可以创建指定大小的数组,数组元素初始为0,语法格式和empty()相同。

import numpy as np # 导入numpy并取别名
x = np.zeros([2,2],dtype=int) 
print(x)
'''输出
[[0 0]
 [0 0]]
'''

使用ones(),可以创建指定大小的数组,数组元素初始为1,语法格式和empty()相同。

import numpy as np # 导入numpy并取别名
x = np.ones([2,2],dtype=int) 
print(x)
'''输出
[[1 1]
 [1 1]]
'''

2) 数据类型

Numpy 支持的数据类型比Python内置的类型要多,基本上与C语言的数据类型对应,具体如下:

  • bool:布尔型数据类型(True或False)
  • int:默认的整数类型(类似于C语言中的long、int32或int64)
  • intc:与C的int类型一样,一般是int32或int64
  • intp:用于索引的整数类型(类似于C的ssize_t,一般情况下仍然是int32或int64)
  • int8:字节(-128~127)
  • int16:整数(-32768~32767)
  • int32:整数(-2147483648~2147483647)
  • int64:整数
  • uint8:无符号整数(0~255)
  • uint16:无符号整数(0~65535)
  • uint32:无符号整数(0~4294967295)
  • uint64:无符号整数
  • float:float64类型的简写
  • float16:半精度浮点数,包括1个符号位,5个指数位,10个尾数位
  • float32:单精度浮点数,包括1个符号位,8个指数位,23个尾数位
  • float64:双精度浮点数,包括1个符号位,11个指数位,52个尾数位
  • complex:complex128类型的简写,即128位复数
  • complex64:复数,表示双32位浮点数(实数部分和虚数部分)
  • complex128:复数,表示双64位浮点数(实数部分和虚数部分)

3) 数组属性

Numpy中,每一个线性的数组称为一个轴(axis),也就是维度(dimension)。二维数组相当于两个一维数组,其中一个数组中每个元素又是一个一维数组。包含的主要属性如下:

  • ndarray.ndim:秩,即轴的数量或维度的数量。
  • ndarray.shape:数组的形状,对于矩阵,表示n行m列。
  • ndarray.size:数组元素的总个数,相当于n*m的值。
  • ndarray.dtype:ndarray对象的元素类型。
  • ndarray.itemsize:ndarray对象中每个元素的大小,以字节为单位。
  • ndarray.flags:ndarray对象中每个元素的内存信息。
  • ndarray.real:ndarray元素的实部。
  • ndarray.imag:ndarray元素的虚部。
  • ndarray.data:包含实际数组元素的缓冲区。一般通过数组的索引获取元素,所以通常不需要使用这个属性。
import numpy as np # 导入numpy并取别名
b = np.array([[1,2],[3,4]])
print(b)
'''输出
[[1 2]
 [3 4]]
'''
print(type(b))  # <class 'numpy.ndarray'>
print(b.dtype) # int64
print(b.ndim) # 2
print(b.size) # 4
print(b.shape) # (2, 2)

4. 基本运算

1) 算术运算

import numpy as np 
a = np.array([1,2,3,4])
print(a+2) # [3 4 5 6]
print(a-2) # [-1  0  1  2]
print(a*2) # [2 4 6 8]
print(a/2) # [0.5 1.  1.5 2. ]
b = np.array([2,3,4,5])
print(b-a) # [1 1 1 1]

2) 矩阵积

dot()函数能够返回两个数组的点积。一维数组,位置相同的元素相乘,然后再求和,二维数组(矩阵)之间的运算,则得到的是矩阵积。

a.dot(b)与np.dot(a,b) 效果相同,矩阵积计算不遵循交换律,也就是np.dot(a,b)和np.dot(b,a)得到的结果不一样。

import numpy as np
a = np.array([1,2,3,4])
b = np.array([4,5,6,7])
print(np.dot(a,b))  # 60
c = np.array([[1,2],[3,4]])
d = np.array([[5,6],[7,8]])
print(np.dot(c,d))
'''输出
[[19 22]
 [43 50]]
'''
print(np.dot(d,c))
'''输出
[[23 34]
 [31 46]]
'''

3) 自增和自减

使用+=和-=运算符可以实现数组自增和自减。

import numpy as np
a = np.array([[1,2],[3,4]])
a += 1
print(a)
'''输出
[[2 3]
 [4 5]]
'''

4) 通用函数

三角函数等很多数学运算符符合通用函数的定义,计算平方根的sqrt()函数、用来取对数的log()函数和正弦函数sin()

import numpy as np
a = np.array([[1,2],[3,4]])
print(np.sin(a))
'''输出
[[ 0.84147098  0.90929743]
 [ 0.14112001 -0.7568025 ]]
'''

5) 聚合函数

聚合函数是指对一组值,进行操作,返回一个单一值作为结果的函数。

import numpy as np
a = np.array([[1,2],[3,4]])
print(a.sum()) # 10
print(a.min()) # 1
print(a.max()) # 4
print(a.std()) # 1.118033988749895

5. 索引、切片和迭代

1) 索引

访问单个元素,用法与list类似。

import numpy as np
a = np.array([1,2,3,4])
print(a[2]) # 3
b = np.array([[1,2],[3,4]])
print(b[1,1]) # 4
print(b[-1,-1]) # 4

2) 切片

切片抽取数组的一部分元素并生成新数组。

import numpy as np
a = np.array([range(0,10),range(10,20),range(20,30),range(40,50)])
print(a[1:5,1:7]) # 截取连续局部矩阵
'''输出
[[11 12 13 14 15 16]
 [21 22 23 24 25 26]
 [41 42 43 44 45 46]]
'''
print(a[[1,3],1:7])
'''输出
[[11 12 13 14 15 16]
 [41 42 43 44 45 46]]
'''

3) 迭代

对于一维数组,可以使用for进行迭代;对于二维数组,可以使用嵌套的for进行迭代,外层for扫描行,内层for扫描列。

import numpy as np
a = np.array([[1,2],[3,4]])
for row in a:
    for col in row:
        print(col,end=' ')
print(' ') # 换行

for item in a.flat: # flat 表示数组元素迭代器
    print(item,end=' ')

6. 条件和布尔数组

使用条件表达式和布尔运算符有选择地抽取元素。

import numpy as np
a = np.random.random((4,4))
print(a)
'''输出
[[0.49954069 0.42753987 0.25914236 0.1253001 ]
 [0.48690952 0.35854975 0.07134125 0.2598206 ]
 [0.15511689 0.8465675  0.9928091  0.40122818]
 [0.21870776 0.97000971 0.92714403 0.97068106]]
'''
print(a[a<0.5])
'''输出
[0.49954069 0.42753987 0.25914236 0.1253001  0.48690952 0.35854975
 0.07134125 0.2598206  0.15511689 0.40122818 0.21870776]
'''

7. 变换形状

使用reshape()函数可以改变数组的形状,该函数返回一个新数组。

import numpy as np
a = np.random.random(12)
print(a)
print(a.reshape(3,4))
a.shape = (2,6) # 直接将新形状的元组赋值给shape属性
print(a)

在这里插入图片描述

改变数组形状的操作是可逆的,使用ravel()函数可以把二维数组再变回一维数组。甚至直接改变数组shape属性的值。使用transpose()函数可以实现行、列位置的矩阵转置。

import numpy as np
a = np.array([[1,2],[3,4]])
b = a.transpose() # 行列位置转置
b
''' 输出
array([[1, 3],
       [2, 4]])
'''

8. 操作数组

1) 合并数组

合并数组有以下3种方法:

  • np.concatenate:合并维数相同的两个数组。
  • np.vstack:垂直方向合并一维数组和二维数组。
  • np.hstack:水平方向合并一维数组和二维数组。
a = np.ones((2,2))
b = np.zeros((2,2))
print(np.vstack((a,b))) # 垂直方向
''' 输出
[[1. 1.]
 [1. 1.]
 [0. 0.]
 [0. 0.]]
'''
print(np.hstack((a,b))) # 水平方向
''' 输出
[[1. 1. 0. 0.]
 [1. 1. 0. 0.]]
'''

column_stack()row_stack()两个函数把一维数组作为列或行入栈结构,以形成一个新的二维数组。

import numpy as np
a = np.array([1,2,3])
b = np.array([4,5,6])
d = np.column_stack((a,b)) 
print(d)
''' 输出
[[1 4]
 [2 5]
 [3 6]]
'''
e = np.row_stack((a,b))
print(e)
''' 输出
[[1 2 3]
 [4 5 6]]
'''

2) 切分数组

切分数组有以下3种方法:

  • np.split:分割。
  • np.vsplit:垂直分割。
  • np.hsplit:水平分割。
import numpy as np 
a = np.arange(16).reshape(4,4)
print('原数组:')
print(a)
print('默认分割(0轴):')
b = np.split(a,2)
print(b)
print('垂直方向分割:')
c = np.vsplit(a,2)
print(c)
print('水平方向分割:')
d = np.hsplit(a,2)
print(d)

在这里插入图片描述

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

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

相关文章

卷积神经网络经典backbone

特征提取是数据分析和机器学习中的基本概念&#xff0c;是将原始数据转换为更适合分析或建模的格式过程中的关键步骤。特征&#xff0c;也称为变量或属性&#xff0c;是我们用来进行预测、对对象进行分类或从数据中获取见解的数据点的特定特征或属性。 1.AlexNet paper&#…

C/C++ 通过SQLiteSDK增删改查

SQLite&#xff0c;作为一款嵌入式关系型数据库管理系统&#xff0c;一直以其轻量级、零配置以及跨平台等特性而备受青睐。不同于传统的数据库系统&#xff0c;SQLite是一个库&#xff0c;直接与应用程序一同编译和链接&#xff0c;无需单独的数据库服务器进程&#xff0c;实现…

[LaTex]arXiv投稿攻略——jpg/png转pdf

一、将图片复制进ppt&#xff0c;右键单击图片选择设置图片格式&#xff0c;获取图片高度和宽度 二、选择“设计-幻灯片大小-自定义幻灯片大小” 三、设置幻灯片大小为图片大小 四、 选择“最大化” 五、 检查幻灯片大小是否与图像大小一致 六、导出为PDF

Doris单机部署——2.0.1.1版本

目录 一、前期准备工作 1.设置系统最大文件打开句柄数 2.时钟同步 3.关闭每台机器的交换分区 4.下载安装包 二、单节点部署安装Doris (一)安装fe 1.解压改名 2.修改配置文件 3.创建元数据目录 4.启动fe 5.访问fe的webUI (二)安装be 1.进入be目录下&#xff0c;修…

紫光展锐 展讯芯片 展讯处理器解锁BL 各分区结构 ROM 分区列表代表什么 bin img 表示什么意思

是展锐 Android 10.0、Android 9.0 平台 ROM 空间划分情况以及分区格式、分区大小和分区功能的 初步描述。 prodnv 开机后系统中的 productinfo 分区&#xff0c;保 存 adc 校准参数、eng.db 数据库。 Miscdata 保存 ota、recovery 时的一些数据 recovery 存放 recovery.i…

【数据中台】开源项目(1)-LarkMidTable

LarkMidTable 是一站式开源的数据中台&#xff0c;实现中台的 基础建设&#xff0c;数据治理&#xff0c;数据开发&#xff0c;监控告警&#xff0c;数据服务&#xff0c;数据的可视化&#xff0c;实现高效赋能数据前台并提供数据服务的产品。 系统演示地址 &#xff1a; www.l…

Simulink 的代数环

代数环, 就是由于模型的输出反馈到模块或子系统先的某个输入端, 如果这个输入是直接馈入的, 那么二者在同一个采样点内需得到求解, 但又互相依赖, 哪一方都不能完成求解过程, 使得解算器无法解算导致错误产生, 这样的情况称为代数环。 一旦 Simulink 遇到代数环, 将根据 Confi…

交换机配置与管理

文档以国产迈普交换机为例&#xff0c;各厂家交换机配置有少许不同&#xff0c;仅供参考。 交换机命令行模式&#xff1a; 普通用户模式Hostname>&#xff08;&#xff09; exit 输入enable命令 特权用户模式Hostname#&#xff08;&#xff09; exit 输入configu…

BrokerChain

BrokerChain: A Cross-Shard Blockchain Protocol for Account/Balance-based State Sharding 我总感觉这篇文章不完整&#xff0c;缺少一些东西。或者说有些地方并没有详细说。比如状态图的构建&#xff0c;网络重分片的的配置过程。都直接忽略了。 Motivation 1 跨片交易不…

Adversarial Attack on Graph Structured Data(2018 PMLR)

Adversarial Attack on Graph Structured Data----《图结构数据的对抗攻击》 摘要 基于图结构的深度学习已经在各种应用中显示出令人兴奋的结果。然而&#xff0c;与图像或文本对抗攻击和防御的大量研究工作相比&#xff0c;此类模型的鲁棒性却很少受到关注。在本文中&#xf…

【漏洞复现】Array VPN任意文件读取漏洞

漏洞描述 华耀(中国)科技有限公司(简称:Array)于2003年创建于北京,是优秀的网络功能平台解决方案提供商,也是应用交付解决方案、移动应用接入(SSL VPN)解决方案的全球领导者。华耀现有员工200余人,其中研发团队占到100余人,总部位于北京。并在北京、上海、广州、杭…

知识点小总结

‘Integer(int)‘ 已经过时了 https://blog.csdn.net/qq_43116031/article/details/127793512 解决Java中的“找不到符号“错误 解决Java中的“找不到符号“错误_java: 找不到符号_很酷的站长的博客-CSDN博客 可右键打开 错误: 编码 UTF-8 的不可映射字符 错误: 编码 UTF-8 …

1603. 整数集合划分(2016年408数据结构算法题)

一、题目 1603. 整数集合划分https://www.acwing.com/problem/content/description/1605/ 二、算法的基本设计思想 由题意知&#xff0c;将最小的 个元素放在 中&#xff0c;其余的元素放在 中&#xff0c;分组结果即可满足题目要求。仿照快速排序的思想&#xff0c;基于枢…

面向对象编程:Rust的面向对象特性

欢迎关注我的公众号lincyang新自媒体&#xff0c;回复关键字【程序员经典书单】&#xff0c;领取程序员的100本经典书单 大家好&#xff01;我是lincyang。 今天我们将深入探讨Rust语言中的面向对象编程&#xff08;OOP&#xff09;特性&#xff0c;并将其与其他流行编程语言进…

C语言之指针知识点总结

C语言之指针知识点总结 文章目录 C语言之指针知识点总结1. 初识指针1.1 取地址操作符 &1.2 指针变量1.3 解引用操作符 *1.4 指针变量1.4.1 大小1.4.2 指针类型的意义 1.5 void*指针1.6 const关键字1.61 const修饰变量1.6.2 const修饰指针变量 1.7 指针的运算1.7.1 指针-整数…

微信小程序便民小工具源码

微信小程序便民小工具源码,包含身材计算&#xff0c;房贷计算器&#xff0c;工资计算器&#xff0c;血型计算器&#xff0c;进制计算器&#xff0c;量角器&#xff0c;计数器等便民工具。 微信扫一扫即可预览 微信扫一扫即可预览 下载链接:https://www.ym4j.com/program/7525

(二) Windows 下 Sublime Text 3 安装离线插件 Anaconda

1 下载 Sublime Text 3 免安装版 Download - Sublime Text 2 下载 Package Control&#xff0c;放到 Sublime Text Build 3211\Data\Installed Packages 目录下。 Installation - Package Control 3 页面搜索 anaconda anaconda - Search - Package Control Anaconda - Pac…

4. 标准 IO 库

4. 标准 IO 库 1. 标准 IO 简介2. FILE 指针3. 标准输入、标准输出和标准错误4. fopen() 和 flose()5. fread() 和 fwrite()6. fseek 定位7. 检查或复位状态7.1 feof()7.2 ferrof()7.3 clearerr() 8. 格式化 IO8.1 格式化输出8. 2 格式化输入 9. IO 缓冲9.1 文件 IO 的内核缓冲…

坚鹏:中国人寿临沂公司当下中国经济形势与寿险业发展机遇培训

中国人寿保险&#xff08;集团&#xff09;公司属国家大型金融保险企业&#xff0c;2016年中国人寿入主广发银行&#xff0c;开启保险、投资、银行三大板块协同发展新格局。2022年&#xff0c;集团公司合并营业收入站稳万亿平台&#xff1b;合并总资产突破6万亿元大关。中国人寿…

数据结构与算法Java版本单元测验题

1.【实验题 2-2】实现以下对单链表的操作&#xff0c;题意和算法描述见《习题解答》图 2-7。 //将单链表 list 逆转&#xff0c;将各结点的 next 指向其前驱。泛型方法&#xff0c;返回值类型前声明类型参数 T public static void reverse(SinglyList list) 【思考题 2-6】实现…