python_AI库 实例通解NumPy基础操作

本文默认读者具备以下技能:

  • 熟悉python基础知识,vscode或其它编辑工具
  • 熟悉表格文件的基本操作
  • 具备自主扩展学习能力
    在这里插入图片描述

本文通过一个实例,概述了一系列NumPy基础操作,所涉及的操作均为常见操作,更多的知识点参见官方文档https://www.numpy.org.cn/

本文知识点包括:

  • 读取CSV文件(使用loadtxt函数从CSV文件中读取数据,并将缺失值填充为NaN,为后续处理做准备)
  • 切片与索引(通过切片与索引操作,可以方便地提取NumPy数组中的特定元素或子集)
  • 赋值(赋值操作允许我们直接修改NumPy数组中的元素值,实现数据的更新或替换)
  • 布尔索引(布尔索引通过条件表达式筛选数组中的元素,帮助我们快速获取满足特定条件的数据)
  • 三元运算符(np.where函数实现三元运算符的功能,根据条件将数组中的元素替换为不同的值)
  • 裁剪(裁剪操作将数组中的值限制在指定范围内,超出范围的值将被截断或保持为NaN)
  • 转置(转置操作改变数组的行和列,实现数据的行列交换,常用于矩阵运算和数据处理)
  • 数组拼接(数组拼接将多个NumPy数组按照指定轴连接在一起,形成更大的数组结构)
  • NaN值的处理(Not a number的缩写,NaN值需要特殊处理。使用NumPy的函数可以方便地计算排除NaN值的统计量,如均值)

本例采用的二维数组(或称为矩阵)的形式来解释NumPy的基础操作。二维数组实际就是我们最常用的含有行列的表格数据。

二维数组是一个由行和列组成的矩形网格,其中每个元素都可以通过其行索引和列索引来定位。在NumPy中,二维数组通常被用来表示具有行和列的数据集,例如电子表格中的数据。

例如,如果我们有一个包含学生成绩的数据集,每个学生有多门课程的成绩,我们可以将这些数据存储在一个二维数组中。每一行代表一个学生,每一列代表一门课程。通过行索引和列索引,我们可以方便地访问、修改或计算每个学生的成绩。

本例正是基于最常见的二维数据的实例操作,完整代码如下:

import numpy as np
'''
假设我们有一个包含NaN值(即空白字符)的CSV文件
example.csv的内容如下:
1,2,
4,,6
7,8,9
在这个文件中第一行,第二行分别有一个空白字符,读取时将处理为NaN值

'''

# 使用NumPy的loadtxt函数读取CSV文件,并指定缺失值的占位符
# 在这个例子中,我们假设空字符串("")表示NaN
data = np.loadtxt('example.csv', delimiter=',', dtype=float, skiprows=1, usecols=(0, 1, 2), filling_values=np.nan)

# 打印读取的数据
print("读取的CSV数据:")
print(data)

# 切片与索引
print("\n切片与索引:")
print(data[:, 1])  # 获取第二列
print(data[1:3, 0:2])  # 获取第二行到第三行(不包括第三行),以及第一列到第二列(不包括第二列)的子数组

# 赋值
print("\n赋值:")
data[0, 2] = 3  # 将第一行第三列的NaN值替换为3
print(data)

# 布尔索引
print("\n布尔索引:")
condition = ~np.isnan(data)  # 创建一个非NaN的布尔数组
print(data[condition])  # 获取所有非NaN的元素

# 三元运算符(np.where)
print("\n三元运算符:")
data_new = np.where(np.isnan(data), 0, data)  # 将NaN值替换为0,其他值保持不变
print(data_new)

# 裁剪
print("\n裁剪:")
clipped_data = np.clip(data, 1, 8)  # 将数组中的值裁剪到1和8之间,NaN值保持不变
print(clipped_data)

# 转置
print("\n转置:")
transposed_data = data.T  # 转置数组
print(transposed_data)

# 数组拼接
print("\n数组拼接:")
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6]])
# 沿着第一轴(行)拼接
arr_stacked = np.vstack((arr1, arr2))
print(arr_stacked)
# 沿着第二轴(列)拼接
arr_hstacked = np.hstack((arr1, arr2.T))  # 注意:需要转置arr2以匹配列数
print(arr_hstacked)

# 处理NaN值 - 计算非NaN值的均值
print("\n处理NaN值:")
mean_value = np.nanmean(data)  # 计算数组中所有非NaN值的均值
print("Mean excluding NaN values:", mean_value)

在这个脚本中,我们首先使用np.loadtxt函数读取CSV文件,并指定了缺失值的占位符为NaN(filling_values=np.nan)。然后,我们按照之前的例子展示了NumPy的基础操作,包括切片与索引、赋值、布尔索引、三元运算符、裁剪、转置和拼接数组。最后,我们使用np.nanmean函数计算了数组中所有非NaN值的均值。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值