IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 5 numpy -> 正文阅读

[Python知识库]5 numpy

5 numpy

重在数值计算

基础库

大型、多维数组执行数值运算

5.1 基本操作

使用numpy创建数组

t1 = np.array([1,2,3,]) # 注意多了一个逗号
print(t1)
print(type(t1))  # numpy.ndarray numpy特有的一种类型

t2 = np.array(range(10)) # 注意多了一个逗号
print(t2)

t3 = np.arange(4,10,2) # 包头不包尾,步长为2
print(t3)
print(t3.dtype)   # int32

numpy中的数据类型

t4 = np.arange(4,10,2,dtype='float32')
print(t4) # [4. 6. 8.]
print(t4.dtype)   # float32

t5 = np.array([1,2,0,4,],dtype='bool')
print(t5) # [ True  True False  True]
print(t5.dtype)   # bool

'''调整数据类型'''
t6 = t5.astype('int8')
print(t6) # [1 1 0 1]
print(t6.dtype)

numpy中的小数

# 随机生成10个 小于1的小数
t7 = np.array([random.random() for i in range(10)])
print(t7)
print(t7.dtype)

t8 = np.round(t7,2) # 保留两位小数
print(t8)

5.2 数组的计算

查看数组的形状

t.shape

返回元组,
不同结果表示的t的类型不同。

元组有:
1个值:一维数组(元素数)
2个值:二维数组(行,列)
3个值:三维数组<每一个元素都是一个二位数组>(块(元素),(每块里的:)行,列)

修改数组的形状

t.reshape

t4 = np.arange(12)
t4.reshape(3,4) # 变为三行四列的数组

t5 = np.arange(24).reshape(2,3,4)

t5 = t5.reshape(24,) # 变为一维数组 <一个中括号>
t5 = t5.reshape(24,1) # 变为二维数组,列向量 24行一列 <两层中括号>
t5 = t5.reshape(1,24) # 变为二维数组,行向量 一行24列 <两层中括号>

t6 = t5.reshape( ( t5.shape[0]*t5.shape[1], ) ) # 变为一维数组
# t6 = t5.flatten() # 展开成一维

reshape()方法 有返回值,此处t5调用reshape后无变化

一般有返回值的方法 不会对本身不修改

数组的计算

t4 = np.arange(12)
t4.reshape(3,4) # 变为三行四列的数组

t5 = np.arange(24).reshape(2,3,4)

t5 = t5.reshape(24,) # 变为一维数组 <一个中括号>
t5 = t5.reshape(24,1) # 变为二维数组,列向量 24行一列 <两层中括号>
t5 = t5.reshape(1,24) # 变为二维数组,行向量 一行24列 <两层中括号>

t6 = t5.reshape( ( t5.shape[0]*t5.shape[1], ) ) # 变为一维数组
# t6 = t5.flatten() # 展开成一维

5.3 读取本地数据

轴(axis)

0:块方向
1:行方向
2:列方向

读取数据

用的不多,pandas用的多

np.loadtxt(路径,类型,分隔符,跳过某行,读取的列,转置)

import numpy as np

file_path = "./video_data/video_data_numbers.csv"

t1 = np.loadtxt(file_path,delimiter=",",dtype='int',unpack='True')
# unpack='True'对数组进行转置,默认为False

print(t1)

实现二维数组的转置

import numpy as np

t2 = np.arange(24).reshape((4,6))

t3 = t2.transpose() # 方法1

t4 = t2.T # 方法2

t5 = t2.swapaxes(1,0) # 方法3 不太常用

5.4 索引和切片

用的非常多!!

# 取行
print(t2[2])
# 取连续多行
print(t2[2:]) 
# 取不连续多行
print(t2[[2,4,8]])

# 取列
print(t2[:,0])
# 取连续多列(连续多行)
print(t2[:,2:])
# 取不连续多列
print(t2[:,[2,4,8]])


'''通用方法'''
# 取列
print(t2[2,:])
# 取连续多列(连续多行)
print(t2[2:,:])
print(t2[[2,4,8],:]) # 不连续多行

'''应用'''
# 取的都是交叉点
# 取第三行第四列的值 一个交点
a = t2[2,3]
print(a)
print(type(a)) # numpy.int32
# 取第三行到第五行 第一列到第四列的值 
b = t2[2:5 , 0:4] # 包头不包尾
print(b)

# 取不相邻的点
c = t2[ [0,2],[0,1] ]  # 取的点是(0,0) (2,1)

取到值后 数值修改都水到渠成

numpy中的布尔索引

t2[t2>10] = 3 # t2中大于10的位置 全都换为3

np.where(t2<=10,0,10) # numpy中的三元运算符,小于等于10赋为0 否则为10

t2.clip(10,18) # 裁剪,小于10的替换为10 大于18的替换为18

t2 = t2.astype(float)
t2[2:2] = np.nan # nan为浮点型
  • nan not a number

出现场合:0/0、∞-∞、本地文件为float且有缺失时

  • inf/-inf 正/负无穷

一个数字除以0,python会报错 numpy就是inf/-inf

注意点:
1. 两个nan是不相等的
2. 利用此特性,可以用来判断nan的个数
   np.count_nonzero(t2!=t2) 
   # nan也是非零啊
   # t2!=t2 把数组转成了布尔型,只有nan是True
   
   np.count_nonzero(np.isnan(t2))
   # 同上
 
3. nan和任何值计算都是nan
4. 不能单传的把nan赋为0,常把缺失的地方替换为列的均值/中值/删除该行

常用统计方法

t2.sum(axis = 0) # 行求和
t2.mean(axis = 0) # 行求平均值
np.median(t2,axis = 0) # 行求中值,一定要指定某行/某列

t2.max(axis = 0) # 行最大值
t2.min(axis = 0) # 行最小值
np.ptp(t2,axis = 0) # 行求极值 最大值 最小值的差

t.std(axis = 0) # 标准差,数据和平均值的分散程度 反应稳定情况

应用:任意数组中的nan替换为均值

以下的都是常规常用的方法,要好好掌握

import numpy as np

def fill_ndarray(t1):
    for i in range(t1.shape[1]): # 遍历每一列
        temp_col = t1[:,i] # 当前的一列
        nan_num = np.count_nonzero(temp_col!=temp_col)
        
        if nan_num != 0:
            temp_not_nan_col = temp_col[temp_col == temp_col] # 当前一列不为nan
            
            temp_col(np.isnan(temp_col)) = temp_not_nan_col.mean() # nan的位置替换为均值
    return t1
    
if __name__ == '__main__':
    
    t1 = np.arange(12).reshape((3,4)).astype('float')
    t1[1,2:] = np.nan
    print(t1)
    t1 = fill_ndarray(t1)
    print(t1)

数组的拼接

np.vstack((t1,t2)) # 竖直拼接
np.hstack((t1,t2)) # 水平拼接

t[[1,2],:] = t[[2,1],:] # 行交换
# 选中第二行和第三行   交换位置
t[:,[0,2]] = t[:,[2,0]] # 列交换

# 构造全0数组
zero_data = np.zeros((a_data.shape[0],1))
#           np.zeros((    row,col      ))

# 构造全1数组
one_data = np.ones((b_data.shape[0],1))

# 添加一列全为0的数组
a_data = np.hstack((a_data,zero_data)).astype(int)
# 注意!添加列用水平添加,添加行用竖直添加

# 构造对角线全1的方阵
np.eye(3)

# 某一列的最大值的<位置>,最小值同
np.argmax(t,axis=0) # 行方向上

5.5 生成随机数

np.random
在这里插入图片描述

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-10 13:22:40  更:2021-08-10 13:24:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 12:55:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码