Numpy入门详细教程

大纲:

numpy

1.numpy基本使用

1.1读取数据

在实际开发中,我们需要从文件中读取数据,并进行处理。在numpy中,提供了一系列函数从文件中读取内容并生成矩 阵,对于txt,csv格式的文件,常用的函数为loadtxt().

#文件的读取
import numpy as np 
data = np.loadtxt("D:\\桌面\\本学期课程\\BeijingPM2.5.csv",delimiter=",",skiprows=1,dtype=float)
data

注意:

​ delimiter:字段间隔符

​ skiprows:省略的行

​ dtype:数据类型

运行截图:

image-20220920132914409

1.2创建数组

1.2.1使用array函数创建数组

#使用array创建数组
data1 = np.array([1,2,3])
print(data1)

运行截图:

image-20220920133300211

data2 = np.array(list('abcd'))
print(data2)

运行截图:

image-20220920133329653

data3 = np.array([[1,2],[3,4]])
print(data3)

运行截图:

image-20220920133351162

1.2.2使用arange函数生产数组

#使用arange函数生成数组
a = np.arange(10) #生成0-9的数组
print(a)

运行截图:

image-20220920133511442

x = np.arange(10,20,2) #生成10-20之间步长为2的一维数组
print(x)

1.2.3使用zeros函数生产全0数组

运行截图:

image-20220920133528045

#使用zero函数生成全0数组
a = np.zeros(10,dtype=int)
print(a)

运行截图:

image-20220920133647287

b = np.zeros((4,4),dtype=float) #生成一个四行四列的二维数组
print(b)

运行截图:

image-20220920133626054

1.3查看数据集的相关属性

image-20220920133849598

实例1:

import numpy as np
data = np.loadtxt("D:\\桌面\\本学期课程\\BeijingPM2.5.csv",delimiter=",",skiprows=1,dtype=float)
print(data.shape) #计算数据的形状
print(data.dtype)#查看数据的类型
print(data.T)#转置数据集
print(data.ndim)#查看数据集的维度

运行截图:

image-20220920135822467

实例2:

import numpy as np
a = np.arange(15)
print(a)
b = a.reshape(3,5)#改变维度
print(b)
print(b.ndim)

运行截图:

image-20220920135850378

2.数据操作

2.1数据的合并

2.1.1上下合并

方法1:np.vstack((data1,data2))

方法2:np.row_stack((data1,data2))

#上下合并
A = np.array([[0,1,2,3],[4,5,6,7],[8,9,10,11]])
B = np.array([[12,13,14,15],[16,17,18,19]])
row_AB = np.row_stack((A,B))
print(row_AB)

运行截图:

image-20220920140640422

2.1.2左右合并

方法1:np.hstack((data1,data2))

方法2: np.column_stack((data1,data2))

#左右合并
A = np.array([[0,1,2,3],[4,5,6,7],[8,9,10,11]])
B = np.array([[12],[13],[ 14]])
col_AB = np.column_stack((A,B))
print(col_AB)

运行截图:

image-20220920140841726

2.2数据的切片

数组的内容可以通过索引或切片来获取,与 Python 中 list 的切片操作一样。数组可以基于 0 - n 的下标进行索引, 设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。

2.2.1一维数组

一维数组的切片方法完全同列表切片

#一维数组的切片
import numpy as np
a = np.array([5,6,7,8,9]) #创建一个一维数组
print("获取第一个位置元素:",a[0])#获取第一个位置元素
print("获取倒数第一个元素:",a[-1])#获取倒数第一个元素
print("获取第二个和第三个元素:",a[1:3])
print("获取所有的元素:",a[:])

运行截图:

image-20220920150136612

2.2.2二维数组

我们以一个6*6的数组a为例来讲解二维数组如何切片:

import numpy as np
a = np.arange(1,37).reshape((6,6))
print(a)

运行截图:

image-20220920150234063

我们可以给此数组a建立索引:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JnkNg63D-1663662723462)(D:/Users/tianzi/Pictures/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/numpyback1.png)]

2.2.2.1获取单行数据
import numpy as np
#获取单行数据
a = np.arange(1,37).reshape(6,6)
print(a)
#获取单行数据
print("获取第一行数据:",a[0])
print("获取第一行数据:",a[-6])

运行截图:

image-20220920150446990

2.2.2.2获取多行数据
import numpy as np
a = np.arange(1,37).reshape(6,6)
print(a)
#获取多行数据
print("获取多行数据:",a[[2,3,4]])

运行截图:

image-20220920150517569

2.2.2.3获取某个元素
import numpy as np
a = np.arange(1,37).reshape(6,6)
print(a)
#获取某个元素
print("获取第四行第五列的数据:",a[3,4])

运行截图:

image-20220920150545082

2.2.2.4获取任意范围的数据
import numpy as np
a = np.arange(1,37).reshape(6,6)
print(a)
#获取任意范围的数据
#获取第2-4行,3-5列的数据
print("获取第2-4行,3-5列的数据",a[1:4,2:5])
print("获取前三行数据",a[0:3,:])
print("获取第2-5列数据:",a[:,1:5])

运行截图:

image-20220920150818065

2.2.3练习

将BeijingPM2.5.csv文件的样本数据切割为训练集(70%)和测试集(30%),并将训练集中的特征和目标(PM2.5)切割开。

image-20220920150854252

参考答案:

import numpy as np
data=np.loadtxt("D:\\桌面\\本学期课程\\BeijingPM2.5.csv",delimiter=",",skiprows=1,dtype=float)
train_num=int(data.shape[0]*0.7)
test_num=data.shape[0]-train_num
train_data=data[:train_num,:] # 训练集
test_data=data[train_num:,:] # 测试集
x_train=train_data[:,:-1] # 训练集中的特征值数据
y_train=train_data[:,-1] # 训练集中的目标值数据

2.3数据的去重

去除数据集中重复的数据 ,可以使用unique方法,当axis=0时,按行删除。当axis=1时,按列删除。

2.3.1删除重复的行

data = np.unique(data,axis=0)

#删除重复的行
a = np.array([[1,2,3],[4,5,6],[1,2,3],[4,5,6]])
print(a)
print("修改后的数据:")
b = np.unique(a,axis=0)
print(b)

运行截图:

image-20220920152420729

2.3.2删除重复的列

data = np.unique(data,axis=1)

#删除重复的列
b = np.array([[1,5,5],[2,3,3],[3,6,6]])
print(b)
print("修改后的数据:")
c = np.unique(b,axis=1)
print(c)

运行截图:

image-20220920152650643

2.3.3练习

(1)请创建数组A和B,A为2行5列的数组,取值1-10,B为5行5列的数组,取值6-30.

(2)对A和B进行上下合并,得到数组C

(3)对数组C进行按行去重,得到新的数组D,打印D

参考答案:

import numpy as np
# 请创建数组A和B,A为2行5列的数组,取值1-10,B为5行5列的数组,取值6-30.
A = np.arange(1,11).reshape(2,5)
print("打印A数组:")
print(A)
B = np.arange(6,31).reshape(5,5)
print("打印B数组:")
print(B)
#对A和B进行上下合并
print("上下合并A和B得到C:")
C = np.row_stack((A,B))
print("打印C数组:")
print(C)
#对C数组按行去重
D = np.unique(C,axis=0)
print("去重后的数组D:")
print(D)

运行截图:

image-20220920153639859

2.4通用函数

​ 通用函数是一种对ndarry中的数据执行元素级运算的函数,可以看作是简单函数(接受一个或多个标量值,并产生 一个或多个标量值)的矢量化包装器。

image-20220920153756435

2.4.1 abs函数的使用

print(np.abs(12.0))
print(np.abs(12))
print(np.abs(-10))
print(np.abs(5-4j))

运行截图:

image-20220920154230810

2.4.2 sqrt函数的使用

import numpy as np
print(np.sqrt(4))

运行截图:

image-20220920154345879

2.4.3 exp函数的使用

import numpy as np
print(np.exp(2))

运行截图:

image-20220920154501017

2.4.4 modf函数的使用

import numpy as np
print(np.modf([1.5,2.9]))

运行截图:

image-20220920154622518

3.删除指定的行或列

3.1删除指定的行

使用 np.delete(数组,索引,axis=0) 可以进行按行删除。

#删除指定的行
c = np.arange(1,26).reshape(5,5)
print(c)
print("删除第一行:")
m = np.delete(c,0,axis=0)
print(m)
print("删除第2,3行的数据:")
n = np.delete(c,[1,2],axis=0)
print(n)

运行截图:

image-20220920160345795

3.2删除指定的列

使用 np.delete(数组,索引,axis=1) 可以进行按列删除。

arr1=np.arange(1,20,2).reshape(2,5) 
print(arr1)
print("删除第一列的数据:")
arr2 = np.delete(arr1,0,axis=1)
print(arr2)
print("删除第1,3列的数据")
arr3 = np.delete(arr1,[2,4],axis=1)
print(arr3)

运行截图:

image-20220920160656144

3.3练习

问题:灰色部分的字段对PM2.5的影响没有或者轻微。考虑将其从数据集中删除。

image-20220920160716067

参考答案:

import numpy as np 
data = np.loadtxt("D:\\桌面\\本学期课程\\BeijingPM2.5.csv",delimiter=",",skiprows=1,dtype=float) 
#删除无用的列 
data = np.delete(data,[0,1,2,3,4,9,10,13,14],axis=1) 
print(data)

运行截图:

image-20220920160920998

4.统计函数介绍

image-20220920160936103

备注:axis = 0:按列求。axis = 1:按行求。如果不设置axis参数,则默认求数据集中所有数的相关值 举例:

x = np.arange(18).reshape(3,6) 
print(x.mean()) # 计算整个数组的平均值 # 8.5 
print(x.mean(axis=0)) # 计算各列的平均值 # array([ 6., 7., 8., 9., 10., 11.]) 
print(x.mean(axis=1)) # 计算各行的平均值 # array([ 2.5, 8.5, 14.5]) 
print(x.std()) # 计算整个数组的标准差 #5.188127472091127 
print(x.max()) # 计算整个数组的最大值 #17

运行代码:

image-20220920161044989

练习:

求北京PM2.5数据集中PM10、SO2、NO2、CO的平均值、总和、最大值、最小值。

参考代码:

import numpy as np 
data=np.loadtxt("D:\\桌面\\本学期课程\\BeijingPM2.5.csv",delimiter=",",skiprows=1,dtype=float) 
a=data[:,:9] # 获取PM10、SO2、NO2、CO数据集 
print(a.mean(axis=0)) # 计算均值 
print(a.sum(axis=0)) # 计算总和 
print(a.max(axis=0)) # 计算最大值 
print(a.min(axis=0)) # 计算最小值

运行截图:

image-20220920161236571

5.dot的使用

线性代数中矩阵乘法: np.dot(A,B)或A.dot(B)

举例:

import numpy as np 
matrix1 = np.array([[1, 2, 3], [4, 5, 6]]) 
matrix2 = np.array([[1, 2], [3, 4], [5, 6]]) 
multi = np.dot(matrix1, matrix2) 
print(multi)

运行截图:

image-20220920161423944

6.线性代数函数

NumPy.linalg中有一组标准的矩阵分解运算以及诸如求逆和行列式之类的函数。

image-20220920161443500

使用方法举例:

A=np.array([[1,3],[2,8]]) 
x=np.linalg.det(A) 
print(x)

7.生成自己的数据集

7.1生成随机的符合正态分布的数据

numpy中的random模块

image-20220920161717288

使用举例:

7.1.1 rand函数

这个函数的参数是数组的维度,取值范围是 [0,1)

x1 = np.random.rand(10) 
x2 = np.random.rand(2,3) 
print(x1) 
print(x2)

运行截图:

image-20220920161922749

7.1.2 randint函数

numpy.random.randint(low, high=None, size=None)

返回随机整数,范围区间为[low,high),包含low,不包含high参数:low为最小值,high为最大值,size为数组维 度大小.

x1= np.random.randint(0,6,10) 
x2= np.random.randint(0,9,size=(2,2)) 
print(x1)

运行截图:

image-20220920162008765

7.1.3 normal函数

x = np.random.normal(0, 0.04, 20)#生成均值为0, 方差为0.04的20个值 t 
print(x)

运行截图:

image-20220920162048204

7.2生产均匀间隔的数据

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

其中:

start:起始值

stop:结束值

num:样本数

endpoint:是否包含stop的值

restep:返回步长

dtype:数据类型

举例:

x=np.linspace(2.0, 3.0, num=5) 
print(x)

运行截图:

为最大值,size为数组维 度大小.

x1= np.random.randint(0,6,10) 
x2= np.random.randint(0,9,size=(2,2)) 
print(x1)

运行截图:

[外链图片转存中…(img-UwptSyaB-1663662723501)]

7.1.3 normal函数

x = np.random.normal(0, 0.04, 20)#生成均值为0, 方差为0.04的20个值 t 
print(x)

运行截图:

[外链图片转存中…(img-nm1dUOpp-1663662723502)]

7.2生产均匀间隔的数据

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

其中:

start:起始值

stop:结束值

num:样本数

endpoint:是否包含stop的值

restep:返回步长

dtype:数据类型

举例:

x=np.linspace(2.0, 3.0, num=5) 
print(x)

运行截图:

image-20220920162202703

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值