NumPy数值计算基础

NumPy是用于数据科学计算的基础模块,不但能够完成科学计算任务,而且能够被用作高效的多维数据容器,可用于储存和处理大型矩阵。NumPy的数据容器能够保存任意类型的数据,这使得NumPy可以无缝并快速的整合各种数据。

一、学习目标

  1. 掌握NumPy创建多维数组与生成随机数的方法。
  2. 掌握数组的索引与转换。
  3. 了解NumPy中数组矩阵的运算及通用函数的基本使用方法。
  4.  掌握NumPy读写文件的方法和常用的统计分析的方法。

二、掌握NumPy数组对象ndarray

Python的array模块,直接保存数值,但是不支持多维数组,也没有各种运算函数,不适合做数值运算。

ndarrary:NumPy库的心脏

ndarray:多维数组,具有矢量运算能力,且快速、节省空间

可对整组数据进行快速运算的标准数学函数、线性代数、随机数生成等功能

2.1 创建数组对象

NumPy提供了两种基本的对象:ndarray和ufunc。ndarray(数组)是存储单一数据类型的多维数组,而ufunc则是能够对数组进行处理的函数。

1.数组创建

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

参数名称

说明

object

接收array_like。表示想要创建的数组。无默认。

dtype

接收data-type。表示数组所需的数据类型。如果未给定,则选择保存对象所需的最小类型。默认为None。

ndmin

接收int。指定生成数组应该具有的最小维数。默认为None。

import numpy as np
#创建一维数组
arr1 = np.array([1,2,3,4])

2.数组属性:ndarray(数组)是存储单一数据类型的多维数组。

 属性

说明

ndim

返回 int。表示数组的维数

shape

返回 tuple。表示数组的尺寸,对于 n 行 m 列的矩阵,形状为(n,m)

size

返回 int。表示数组的元素总数,等于数组形状的乘积

dtype

返回 data-type。描述数组中元素的类型

itemsize

返回 int。表示数组的每个元素的大小(以字节为单位)。

创建数组并查看数组属性

In[1]:

import numpy as np  #导入NumPy库

arr1 = np.array([1, 2, 3, 4])  #创建一维数组

print('创建的数组为:',arr1)

Out[1]:

创建的数组为: [1 2 3 4]

In[2]:

arr2 = np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]])    #创建二维数组

print('创建的数组为:\n',arr2)

Out[2]:

创建的数组为:

 [[ 1  2  3  4]

 [ 4  5  6  7]

 [ 7  8  9 10]]

In[3]:

print('数组维度为:',arr2.shape)  #查看数组结构

Out[3]:

数组维度为: (3, 4)

In[4]:

print('数组维度为:',arr2.dtype)  #查看数组类型

Out[4]:

数组维度为: int32

In[5]:

print('数组元素个数为:',arr2.size)  #查看数组元素个数

Out[5]:

数组元素个数为: 12

In[6]:

print('数组每个元素大小为:',arr2.itemsize)  #查看数组每个元素大小

Out[6]:

数组每个元素大小为: 4

重新设置数组的 shape 属性

In[7]:

arr2.shape = 4,3 #重新设置 shape

print('重新设置 shape 后的 arr2 为:',arr2)

Out[7]:

重新设置shape维度后的arr2为: [[ 1  2  3]

 [ 4  4  5]

 [ 6  7  7]

 [ 8  9 10]]

使用 arange 函数创建数组

In[8]:

print('使用 arange 函数创建的数组为:\n',np.arange(0,1,0.1))

Out[8]:

使用arange函数创建的数组为: [ 0.   0.1  0.2  0.3  0.4  0.5  0.6  0.7  0.8  0.9]

使用 linspace 函数创建数组

使用 logspace 函数创建等比数列

使用zeros函数创建数组

使用eye函数创建数组

 使用diag函数创建数组

使用ones函数创建数组

3.数组数据类型

NumPy基本数据类型与其取值范围(部分) 

类型

描述

bool

用一位存储的布尔类型(值为TRUE或FALSE)

inti

由所在平台决定其精度的整数(一般为int32或int64)

int8

整数,范围为−128至127

int16

整数,范围为−32768至32767

int32

……

……

数组数据类型转换

 生成随机数

无约束条件下生成随机数 random

生成服从均匀分布的随机数rand

 生成服从正态分布的随机数 randn

生成给定上下范围的随机数,如创建一个最小值不低于 2、最大值不高于 10 的 2 行 5 列数组 randint

 

np.random.randint(2,10,size=[2,5])

[[6 6 6 6 8]
[9 6 6 8 4]]

random模块常用随机数生成函数

函数

说明

seed

确定随机数生成器的种子。

permutation

返回一个序列的随机排列或返回一个随机排列的范围。

shuffle

对一个序列进行随机排序。

binomial

产生二项分布的随机数。

normal

产生正态(高斯)分布的随机数。

beta

产生beta分布的随机数。

chisquare

产生卡方分布的随机数。

gamma

产生gamma分布的随机数。

uniform

产生在[0,1)中均匀分布的随机数。

2.2 通过索引访问数组

1.一维数组的索引

In[29]:

arr = np.arange(10)

print('索引结果为:',arr[5])  #用整数作为下标可以获取数组中的某个元素

Out[29]:

索引结果为: 5

In[30]:

print('索引结果为:',arr[3:5])  #用范围作为下标获取数组的一个切片,包括arr[3]不包括arr[5]

Out[30]:

索引结果为: [3 4]

In[31]:

print('索引结果为:',arr[:5])  #省略开始下标,表示从arr[0]开始

Out[31]:

索引结果为: [0 1 2 3 4]

In[32]:

print('索引结果为:',arr[-1])  #下标可以使用负数,-1表示从数组后往前数的第一个元素

Out[32]:

索引结果为: 9

2.多维数组的索引

In[36]:

arr = np.array([[1, 2, 3, 4, 5],[4, 5, 6, 7, 8], [7, 8, 9, 10, 11]])

print('创建的二维数组为:',arr)

Out[36]:

创建的二维数组为: [[ 1  2  3  4  5]

 [ 4  5  6  7  8]

 [ 7  8  9 10 11]]

In[37]:

print('索引结果为:',arr[0,3:5])  #索引第0行中第3和4列的元素

Out[37]:

索引结果为: [4 5]

In[38]:

#索引第2和3行中第3~5列的元素

print('索引结果为:',arr[1:,2:])  

Out[38]:

索引结果为: [[ 6  7  8]

 [ 9 10 11]]

In[39]:

print('索引结果为:',arr[:,2])  #索引第2列的元素

Out[39]:

索引结果为: [3 6 9]

使用整数和布尔值索引访问数据

In[40]:

#从两个序列的对应位置取出两个整数来组成下标:arr[0,1], arr[1,2], arr[2,3]

print('索引结果为:',arr[[(0,1,2),(1,2,3)]])

Out[40]:

索引结果为: [ 2  6 10]

In[41]:

print('索引结果为:',arr[1:,(0,2,3)])  #索引第2、3行中第0、2、3列的元素

Out[41]:

索引结果为: [[ 4  6  7]

 [ 7  9 10]]

In[42]:

mask = np.array([1,0,1],dtype = np.bool)

#mask是一个布尔数组,它索引第1、3行中第2列的元素

print('索引结果为:',arr[mask,2])

Out[42]:

索引结果为: [3 9]

变换数组的形态

改变数组形状

In[43]:

arr = np.arange(12)  #创建一维数组

print('创建的一维数组为:',arr)

Out[43]:

创建的一维数组为:  [ 0  1  2  3  4  5  6  7  8  9 10 11]

In[44]:

print('新的一维数组为:',arr.reshape(3,4))  #设置数组的形状

Out[44]:

新的一维数组为: [[ 0  1  2  3]

 [ 4  5  6  7]

 [ 8  9 10 11]]

In[45]:

print('数组维度为:',arr.reshape(3,4).ndim)  #查看数组维度

Out[45]:

数组维度为: 2

使用ravel函数展平数组

In[46]:

arr = np.arange(12).reshape(3,4)

print('创建的二维数组为:',arr)

Out[46]:

创建的二维数组为:

 [[ 0  1  2  3]

 [ 4  5  6  7]

 [ 8  9 10 11]]

In[47]:

print('数组展平后为:',arr.ravel())

Out[47]:

数组展平后为:  [ 0  1  2  3  4  5  6  7  8  9 10 11]

使用flatten函数展平数组 横向展平 纵向展平

In[48]:

print('数组展平为:',arr.flatten())  #横向展平

Out[48]:

数组展平为: [ 0  1  2  3  4  5  6  7  8  9 10 11]

In[49]:

print('数组展平为:',arr.flatten('F'))  #纵向展平

Out[49]:

数组展平为: [ 0  4  8  1  5  9  2  6 10  3  7 11]

组合数组

使用hstack函数实现数组横向组合:np.hstack((arr1,arr2))

使用vstack函数实现数组纵向组合:np.vstack((arr1,arr2))

使用concatenate函数实现数组横向组合:np.concatenate((arr1,arr2),axis = 1))

使用concatenate函数实现数组纵向组合:np.concatenate((arr1,arr2),axis = 0))

切割数组

使用hsplit函数实现数组横向分割: np.hsplit(arr1, 2)

使用vsplit函数实现数组纵向分割: np.vsplit(arr, 2)

使用split函数实现数组横向分割: np.split(arr, 2, axis=1)

使用split函数实现数组纵向分割: np.split(arr, 2, axis=0)

掌握 NumPy 矩阵与通用函数

创建NumPy矩阵

创建与组合矩阵

使用mat函数创建矩阵: matr1 = np.mat("1 2 3;4 5 6;7 8 9")

使用matrix函数创建矩阵:matr2 = np.matrix([[1, 2, 3],[4, 5, 6],[7, 8, 9]])

使用bmat函数合成矩阵:np.bmat("arr1 arr2; arr1 arr2")

矩阵的运算

矩阵与数相乘:matr1*3

矩阵相加减:matr1±matr2

矩阵相乘:matr1*matr2

矩阵对应元素相乘:np.multiply(matr1,matr2)

属性

说明

T

返回自身的转置

H

返回自身的共轭转置

I

返回自身的逆矩阵

A

返回自身数据的2维数组的一个视图

认识ufunc函数

通用函数(universal function),是一种能够对数组中所有元素进行操作的函数。

四则运算:加(+)、减(-)、乘(*)、除(/)、幂(**)。

数组间的四则运算表示对每个数组中的元素分别进行四则运算,所以形状必须相同。

比较运算:>、<、==、>=、<=、!=。比较运算返回的结果是一个布尔数组,每个元素为每个数组对应元素的比较结果。

逻辑运算:np.any函数表示逻辑“or”,np.all函数表示逻辑“and”。运算结果返回布尔值。

ufunc函数的广播机制

广播(broadcasting)是指不同形状的数组之间执行算术运算的方式。需要遵循4个原则。

让所有输入数组都向其中shape最长的数组看齐,shape中不足的部分都通过在前面加1补齐。

输出数组的shape是输入数组shape的各个轴上的最大值。

如果输入数组的某个轴和输出数组的对应轴的长度相同或者其长度为1时,这个数组能够用来计算,否则出错。

当输入数组的某个轴的长度为1时,沿着此轴运算时都用此轴上的第一组值。

一维数组的广播机制

二维数组的广播机制 

 利用 NumPy 进行统计分析

读写文件

NumPy文件读写主要有二进制的文件读写和文件列表形式的数据读写两种形式

save函数是以二进制的格式保存数据。 np.save("../tmp/save_arr",arr)

load函数是从二进制的文件中读取数据。 np.load("../tmp/save_arr.npy")

savez函数可以将多个数组保存到一个文件中。 np.savez('../tmp/savez_arr',arr1,arr2)

存储时可以省略扩展名,但读取时不能省略扩展名。

读取文本格式的数据

savetxt函数是将数组写到某种分隔符隔开的文本文件中。

np.savetxt("../tmp/arr.txt", arr, fmt="%d", delimiter=",")

loadtxt函数执行的是把文件加载到一个二维数组中。

np.loadtxt("../tmp/arr.txt",delimiter=",")

genfromtxt函数面向的是结构化数组和缺失数据。

np.genfromtxt("../tmp/arr.txt", delimiter = ",")

使用数组进行简单统计分析

直接排序

sort函数是最常用的排序方法:arr.sort()

sort函数也可以指定一个axis参数,使得sort函数可以沿着指定轴对数据集进行排序。axis=1为沿横轴排序; axis=0为沿纵轴排序。

间接排序

argsort函数返回值为重新排序值的下标。 arr.argsort()

lexsort函数返回值是按照最后一个传入数据排序的。 np.lexsort((a,b,c))

去重与重复数据

通过unique函数可以找出数组中的唯一值并返回已排序的结果。

np.tile(A,reps)

tile函数主要有两个参数,参数“A”指定重复的数组,参数“reps”指定重复的次数。

numpy.repeat(a, repeats, axis=None)

repeat函数主要有三个参数,参数“a”是需要重复的数组元素,参数“repeats”是重复次数,参数“axis”指定沿着哪个轴进行重复,axis = 0表示按行进行元素重复;axis = 1表示按列进行元素重复。

这两个函数的主要区别在于,tile函数是对数组进行重复操作,repeat函数是对数组中的每个元素进行重复操作。

常用的统计函数

当axis=0时,表示沿着纵轴计算。当axis=1时,表示沿着横轴计算。默认时计算一个总值。

函数

说明

sum

计算数组的和

mean

计算数组均值

std

计算数组标准差

var

计算数组方差

min

计算数组最小值

max

计算数组最大值

argmin

返回数组最小元素的索引

argmax

返回数组最小元素的索引

cumsum

计算所有元素的累计和

cumprod

计算所有元素的累计积

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验报告: 一、实验目的和要求 本次实验的主题为“Numpy数值计算”,旨在让我们掌握Numpy基本数据结构、Numpy数组的创建和基础运算,以及Numpy数组的统计分析方法。具体要求如下: 1、了解Numpy的基本数据结构,包括数组、矩阵等。 2、学会使用Numpy创建数组,并掌握数组的索引、切片、重塑等操作。 3、学会使用Numpy进行数组的基本运算,如加、减、乘、除等。 4、学会使用Numpy进行数组的统计分析,包括最大值最小值、平均值、方差等。 二、实验过程 1、创建数组 我们首先需要了解Numpy的基本数据结构——数组。数组可以看作是一种有序的元素集合,每个元素都有一个数字索引。Numpy提供了多种创建数组的方式,如下所示: import numpy as np # 从列表创建一维数组 a = np.array([1, 2, 3, 4, 5]) print(a) # 从列表创建二维数组 b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(b) # 创建全零数组 c = np.zeros((3, 3)) print(c) # 创建全一数组 d = np.ones((4, 4)) print(d) # 创建随机数数组 e = np.random.rand(3, 3) print(e) 2、数组的索引、切片和重塑 与Python中的列表类似,Numpy数组也支持索引、切片和重塑等操作。如下所示: # 数组索引 print(a[2]) print(b[1][2]) # 数组切片 print(a[1:4]) print(b[1:, 1:]) # 数组重塑 f = np.arange(12).reshape(3, 4) print(f) 3、数组的基本运算 Numpy支持数组的基本运算,如加、减、乘、除等。如下所示: # 数组加法 g = np.array([[1, 2], [3, 4]]) h = np.array([[5, 6], [7, 8]]) print(g + h) # 数组减法 print(g - h) # 数组乘法 print(g * h) # 数组除法 print(g / h) 4、数组的统计分析 Numpy提供了多种数组的统计分析方法,如最大值最小值、平均值、方差等。如下所示: # 数组最大值 print(np.max(g)) # 数组最小值 print(np.min(g)) # 数组平均值 print(np.mean(g)) # 数组方差 print(np.var(g)) 三、实验结果 经过以上实验,我们成功地掌握了Numpy的基本数据结构、数组的创建和基础运算,以及数组的统计分析方法。我们可以使用Numpy进行更为高效和准确的数值计算,并且可以快速地进行数据可视化和分析。 四、实验总结 本次实验让我们深入了解了Numpy数值计算和数据分析功能,掌握了创建数组、数组的索引、切片和重塑、数组的基本运算和统计分析等技能。在日后的学习和应用中,我们将更加熟练地使用Numpy进行数据处理和分析,并且可以更好地应对各种数据分析任务。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值