【数据处理】NumPy库介绍及运用

3.1 NumPy

3.1.1 NumPy简介

1. 简要介绍

NumPy,即Numeric Python;提供丰富的数学函数、强大的多维数组对象以及优异的运算性能。

  • N维数组结构
  • 精密复杂的函数
  • 可集成到C/C++和Fortran代码的工具
  • 线性代数、傅里叶变换以及随机数能力

2.数组运用举例

  • 音频文件存储

音频文件可以存储为一维数组audio[],取第一秒的数据audio[:44100],下图中的数组元素表示该段的音频数据。
image.png

  • 图像存储

图像可以看成是若干个像素组成的矩阵,大小为其宽度和高度。

  • 黑白图像/灰度图像

每个像素可以由单个数字表示,image[:10,:10]截取下图中的一部分图片表示如下:
image.png

  • 彩色图像

每个像素点由三个数字表示红绿蓝三种颜色的数据,大小为高3,数组为三维数组
image.png

3.1.2 NumPy的下载与安装

菜鸟教程:https://www.runoob.com/numpy/numpy-install.html

  • NumPy 包的下载地址:https://pypi.python.org/pypi/numpy
  • 使用pip工具直接下载NumPy包
pip install numpy

image.png
anaconda自带安装了numpy

  • 导入NumPy
import numpy
import numpy as np
from numpy import *
from numpy import array, sin

3.1.3 Numpy数组介绍及运算

numpy数组是一个多维数组对象 ,称为ndarray;
numpy.array和标准Python库类array.array不一样,标准库中的只处理一维数组和提供少量功能。

1.numpy.array组成部分

  • 实际的数据,下标从0开始,同一个numpy数组的所有元素类型必须相同
  • 描述这些数据的元数据

2.列表和numpy数组对比

元素类型
  • 列表list:元素可以为多种类型,a = [1,8.0,“abc”,obj]
  • numpy数组ndarray:元素必须为同一种类型,如a = numpy.array([0,1,2,3,4]),数据类型均为整型
元素运算

Numpy优势

  • 矢量化,代码中没有显示的索引和循环操作
  • 广播,对每个元素进行操作
import numpy as np

# 如数组相乘比较
# numpy数组ndarray
a = np.array([0, 1, 2, 3, 4])
b = np.array([5, 6, 7, 8, 9])
c1 = a * b
print(c1)

# 列表list
a = [0, 1, 2, 3, 4]
b = [5, 6, 7, 8, 9]
c2 = list()
for i in range(len(a)):
    c2.append(a[i] * b[i])
print(c2)

3.numpy支持的数据类型

bool,int,float,complex

名称描述名称描述
bool用一个字节存储的布尔类型 (True或False)uint32无符号整数,0至2 ** 32 -1
int由所在平台决定其大小的整数
(一般为int32或int64)
uint64无符号整数,0至2**63-1
int8一个字节大小,-128 至 127float16半精度浮点数:16位,正负号1位, 指数5位,精度10位
int16整数,-32768 至 32767float32单精度浮点数:32位,正负号1位, 指数8位,精度23位
int32整数, -2 ** 31 至 2 ** 32 -1float64或float双精度浮点数:64位,正负号1位, 指数11位,精度52位
int64整数,-263至263-1complex64复数,分别用两个32位浮点数表示实部和虚部
uint8无符号整数,0至255complex128或complex复数,分别用两个64位浮点数表示 实部和虚部
uint16无符号整数, 0 至 65535

4. 创建Numpy数组

Python中创建数组的5中通用方法
  • 通过其它Python结构创建(例如列表和元组)
  • numpy数组本身的数组创建对象(例如arange,ones,zeros等)
  • 从磁盘读取数组
  • 使用字符串或缓冲区从原始字节创建数组
  • 使用特殊的库函数(如随机函数random)
创建数组实例

array,arange,zeros,ones,full,eye,np.linspace

代码结果说明
a = array([0,1,2,3,4])[0,1,2,3,4]创建一个一维数组,有5个元素,每个元素为整型
a1 = arange(5)[0,1,2,3,4]
a2 = arange(0,6,2)[0,2,4]arange函数的三个参数分别为:起始数( 含),终止数(不含),步长
b = array([(1.0,2.0,3.0),(4.0,5.0,6.0)])[[1.,2.,3.],[4.,5.,6.]]创建一个二维数组,2行3列,共有6个元 素,每个元素为浮点型64位
c = array( [ [1,2,3], [4,5,6] ], dtype=complex )[[1.+0.j, 2.+0.j, 3.+0.j], [4.+0.j, 5.+0.j, 6.+0.j]]二维数组,2行3列,效果与上 面一种方法类似,但数据类型为 complex128
d = zeros((2,3))[[0. 0. 0.],
[0. 0. 0.]]
创建一个2行3列的二维数组,值全部为0
e = ones((1,5))[[1. 1. 1. 1. 1.]]创建一个1行5列的一维数组,值全为1
f = full((2,3,4),8)[[[8 8 8 8],
[8 8 8 8],
[8 8 8 8]]

[[8 8 8 8],
[8 8 8 8],
[8 8 8 8]]]
创建一个元素全是8的三维数组
g = eye(3,3)[[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]]创建3行3列的二维数组,对角线为1,其 它元素均为0
h = random.random((2,3))[[0.98772846, 0.53233087, 0.81990949], [0.45654177, 0.25143958, 0.45555412]]创建2行3列的二维数组,元素值为随机数
i = np.arange(3) i.repeat(2)[0,1,2]
[0,0,1,1,2,2]
单个元素重复
j = np.arange(3) np.tile(j, 2)
np.tile(j, (2,3))
[0,1,2]
[0,1,2,0,1,2]
[[0,1,2,0,1,2,0,1,2],
[0,1,2,0,1,2,0,1,2]]
数组整理重复
k1 = np.linspace(0, 5, 5)
k1 = np.linspace(0, 5, 5, endpoint=False)
[0. , 1.25, 2.5 , 3.75, 5. ] [0., 1., 2., 3., 4.]在指定的间隔内返回均匀间隔的数字, 形成一个等差数列

numpy数组的属性

NumPy支持多维数组,每个维度(dimensions)也称为轴 (axes)。维度的数量称为秩(rank),一维数组的秩为1, 二维数组的秩为2,以此类推。
查看属性:数组名.属性名”或者“属性名(数组名)”,例如:a.ndim或者ndim(a)
a = array([0,1,2,3,4])
b = array( [ (1.0, 2.0, 3.0), (4.0, 5.0, 6.0) ] )
c = array( [ [1,2,3], [4,5,6] ], dtype=complex )

属性名描述数组a数组b数组c
ndim维数,等于秩122
shape每个维度上的长度52,32,3
size数组元素的总个数566
dtype表示数组中元素类型的对象int32float64complex128
itemsize数组中每个元素的大小(以字节为单位)4816

numpy数组的输出,索引
  • 一维数组被打印成行,二维数组被打印为矩阵,三维数组被打印为矩阵列表
  • 如果一个数组太大了,无法完整输出,打印时NumPy将自动省略中间部分而只打印角落的部分
from numpy import *

a = arange(0, 100, 10)
print(a)  # [ 0 10 20 30 40 50 60 70 80 90]
a[2]  # 20 a数组的第2个元素
a[2:5]  # [20,30,40] a数组的第2个到第4个元素
indices = [1, 6, -2]  # 通过索引获取数组中的部分数据
print(a[indices])  # [10 60 80] 取a数组的正数第1和第6个,以及倒数第2个元素
mask = array([True, False, True, False, False, True, False, True, False, False])
print(a[mask])  # [0 20 50 70] 通过布尔值来索引,只输出布尔值为真的对应数据

b = array([(1.0, 2.0, 3.0), (4.0, 5.0, 6.0)])
c = array([[1, 2, 3], [4, 5, 6]], dtype=complex)

# 二维数组的第一个元素11所在的位置是第0行第0列
d = array([[11, 12, 13, 14, 15],
           [21, 22, 23, 24, 25],
           [31, 32, 33, 34, 35],
           [41, 42, 43, 44, 45],
           [51, 52, 53, 54, 55]])

print(a, b, c, sep='\n')

print(d[0, 1:4])  # 第0行的[1,4)列输出
print(d[1:4, 0])  # 第[1,4)行,第0列输出
print(d[::2])  # 所有行中,步长为2;列为所有列
print(d[::2, ::2])  # 所有行中,步长为2;列为所有列中,步长为2
print(d[:, 1])  # 所有行,列为第一列
  • 数组切片结果

image.png

5.numpy数组的运算

运算示例1

a = arange(10) #[0,1,2,3,4,5,6,7,8,9]

b=arange(0,100,10) # [0,10,20,30,40,50,60,70,80,90]

代码结果说明
a.sum()45数组求和
a.min()0数组的最小值
a.max()9数组的最大值
a.cumsum()[0,1,3,6,10,15,21,28,36,45]输出结果中每一个元素的值等于数组前n个元素的累加和
b[b>50][60,70,80,90]只取出大于50的元素
b[b%3 == 0][0,30,60,90]只取出B数组中能整除3的元素
运算示例2

a = array( [10,20,30,40] )
b = arange( 4 ) # [0,1,2,3]

代码结果说明
a+b[10,21,32,43]两个数组逐元素相加
a-b[10,19,28,37]两个数组逐元素相减
a*b[0,20,60,120]两个数组逐元素相乘
a/b[inf,20.,15.,13.33333]两个数组逐元素相除,第一个元素为除0的结果
b**2[0,1,4,9]数组b元素的乘方
10*sin(a)[-5.44021111, 9.12945251, -9.88031624, 7.4511316 ]对a的元素求sin后再乘以10
a<21[Ture,Ture,False,False]判断a的元素值是否小于21,小于的显示为True, 不小于的显示为False
a.dot(b)200dot() 函数计算两个数组的点积,即向量乘法,相当于a1b1+a2b2+a3b3+a4b4,得到一个数值

统计特征计算

a = array([0,1,2,3,4])

函数名描述结果
mean(a)算数平均值2.0
std(a)标准差1.1412135623730951
var(a)方差2.0
average(a,weight= [0,0.1,0.2,0.3,0.4])加权平均值3.0
median([1,3,100])中位数3

5. numpy数组形状调整

形状调整指的是数组维度方面的变化

reshape函数

reshape后形成的新数组,和原数组共享同一段内存空间,并不会产生一个新的地址空间。如果对其中a、b、c中任何一个数组的元素进行修改,其它2个数组的内容也同时会发生变化。例如:b[0,0]=99,修改完毕后,a[0]和c[0,0,0,0]的值也会变成99。

from numpy import *

a = arange(16)  # a是一个一维数组 [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15]
b = a.reshape(4, 4)  # b是一个二维数组 
c = a.reshape(2, 2, 2, 2)  # c是一个四维数组
print(a, b, c, sep='\n')

flatten函数

使用flatten函数可以将高维数组转化为向量,和reshape不同的是, flatten函数会生成一份新的复制。

from numpy import *

a = array([[n + m * 10 for n in range(3) for m in range(4)]])
# n [0,2];m [0,3]
# a是一个3行4列的二维数组,[[ 0 10 20 30  1 11 21 31  2 12 22 32]]
b = a.flatten()  # b是一个向量,[ 0 10 20 30  1 11 21 31  2 12 22 32]
print(b)
b[0:4] = -1  # 修改b的前4个元素值
print(a)
print(b)

6. numpy常用函数汇总

image.png

  • 24
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: NumPy是一个用于进行科学计算的Python库,提供了丰富的多维数组操作函数和工具。它是构建在Python的原始数据类型之上的,能够高效地进行大规模数据处理和数值计算。 NumPy的中文手册(CHM)是通过该库的官方文档翻译而来的。该手册详细介绍NumPy的各种功能和用法,方便初学者快速上手,并提供了深入的技术指南和实用示例供进阶使用。 该手册内容涵盖了NumPy数组的创建和操作、数组索引和切片、数组的数学运算和统计方法、数组的形状和维度变换、数组的文件输入输出等。此外,手册还介绍NumPy的广播机制、通用函数、线性代数、随机数生成等高级功能和应用。 通过使用该手册,用户能够快速掌握NumPy的基本概念和操作,能够灵活地处理各种数据类型,进行数据的查询、运算、转置、排序等各种操作。此外,手册还提供了对于NumPy的扩展库和第三方工具的介绍和链接,使用户能够进一步了解和应用NumPy在科学计算和数据处理领域的广泛应用。 总之,NumPy的中文手册(CHM)是一个非常实用的工具,能够帮助用户深入理解和掌握NumPy库的核心功能和应用,为科学计算和数据处理提供强大的支持。 ### 回答2: NumPy是一个开源的Python科学计算库,用于处理大型多维数组和矩阵。它不仅提供了一个高效的数据结构,还包含了许多用于数组操作的函数。 NumPy的中文手册chm包含了对NumPy库的详细介绍和使用指南。这个手册可以帮助用户了解NumPy的核心概念,并提供了丰富的示例代码来演示如何使用NumPy进行数据处理。 手册中包含了NumPy数组的创建、操作、索引等基本操作的说明。它还介绍NumPy提供的各种数学函数和统计函数,如加法、减法、乘法、除法、平方、平方根等。用户可以通过这些函数对数组进行各种运算和统计分析。 此外,手册还介绍NumPy数组的高级操作,如数组转置、重塑、连接、切片等。这些方法可以使用户更方便地进行数组的操作和处理。 手册还包含了NumPy的广播机制、向量化操作和ufunc函数等高级特性的说明。这些特性可以帮助用户高效地处理大规模的数组数据,提高计算速度和代码的简洁性。 总之,NumPy数据处理中文手册chm提供了全面而详细的NumPy库的说明和使用指南。通过阅读和学习这个手册,用户可以掌握NumPy的使用方法,更好地进行数据处理和科学计算。它是NumPy库的重要参考资料,对于使用NumPy进行数据处理的用户非常有价值。 ### 回答3: NumPy是一个用于数值计算的Python库,它提供了丰富的数学函数和高效的多维数组对象。NumPy数据处理中文手册(chm)是一个详细的中文文档,涵盖了NumPy库的各种特性和用法,旨在帮助用户学习和使用NumPy进行数据处理。 这份中文手册包含了NumPy的安装方法、常用数据类型和数组操作函数的详细介绍,以及使用NumPy进行数据处理的各种技巧和例子。手册按照章节组织,每个章节都涵盖了特定主题。例如,第一章介绍NumPy的基本概念和常用数据类型,第二章介绍了数组的创建和操作方法,第三章介绍了数学函数和统计方法,以此类推。 手册中的每个主题都以简洁明了的方式进行介绍,并提供了示例代码和说明,方便用户理解和运用。它还包含了一些常见问题的解答和一些技巧和技巧,帮助用户更好地利用NumPy进行数据处理和分析。 对于初学者来说,这份中文手册是学习NumPy的宝贵资源。它提供了全面而详细的资料,帮助新手从基础到进阶快速上手NumPy。对于有经验的用户来说,手册也提供了一些高级的技巧和用法,帮助他们更好地掌握NumPy的核心功能和扩展模块。 总之,NumPy数据处理中文手册(chm)是一份包含丰富内容的中文文档,它涵盖了NumPy库的各种特性和用法,旨在帮助用户学习和使用NumPy进行数据处理。无论是初学者还是有经验的用户,都可以从中获得有益的知识和技巧。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值