大家好,我是涛哥,本文内容来自 涛哥聊Python ,转载请标原创。
更多Python学习内容:http://ipengtao.com
在数据科学和数据分析领域,NumPy是Python中最基础和最重要的库之一。它提供了强大的N维数组对象,以及丰富的数学函数库,极大地提升了数据处理和计算的效率。本文将详细介绍NumPy数组的基本操作,包括数组创建、数组属性、数组索引与切片、数组运算、数组形状操作和常用函数,并通过具体的示例代码展示如何高效地进行数组操作。
NumPy简介
NumPy(Numerical Python)是一个开源的Python库,主要用于科学计算。它提供了一个高性能的多维数组对象,以及用于操作这些数组的函数和工具。NumPy是许多其他数据科学库(如Pandas、SciPy、TensorFlow等)的基础。
安装NumPy
在使用NumPy之前,需要先进行安装。可以通过以下命令安装NumPy:
pip install numpy
数组的创建
从列表创建数组
可以通过numpy.array
函数将Python列表转换为NumPy数组。
import numpy as np
# 从列表创建一维数组
arr1 = np.array([1, 2, 3, 4, 5])
print("一维数组:", arr1)
# 从列表创建二维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print("二维数组:\n", arr2)
使用NumPy函数创建数组
NumPy提供了一些函数来创建特定类型的数组,如全零数组、全一数组、等差数组等。
# 创建全零数组
zeros = np.zeros((3, 4))
print("全零数组:\n", zeros)
# 创建全一数组
ones = np.ones((2, 3))
print("全一数组:\n", ones)
# 创建等差数组
arange = np.arange(0, 10, 2)
print("等差数组:", arange)
# 创建线性等分数组
linspace = np.linspace(0, 1, 5)
print("线性等分数组:", linspace)
使用随机数创建数组
NumPy的random
模块可以生成各种随机数数组。
# 生成均匀分布的随机数数组
uniform_random = np.random.rand(3, 4)
print("均匀分布的随机数数组:\n", uniform_random)
# 生成标准正态分布的随机数数组
normal_random = np.random.randn(3, 4)
print("标准正态分布的随机数数组:\n", normal_random)
# 生成指定范围内的随机整数数组
random_integers = np.random.randint(1, 10, size=(3, 4))
print("随机整数数组:\n", random_integers)
数组的属性
可以通过数组的属性获取数组的形状、大小、数据类型等信息。
# 获取数组的形状
shape = arr2.shape
print("数组形状:", shape)
# 获取数组的大小
size = arr2.size
print("数组大小:", size)
# 获取数组的维数
ndim = arr2.ndim
print("数组维数:", ndim)
# 获取数组的数据类型
dtype = arr2.dtype
print("数组数据类型:", dtype)
数组索引与切片
一维数组的索引与切片
arr = np.array([10, 20, 30, 40, 50])
# 索引
print("索引1:", arr[1]) # 输出: 20
# 切片
print("切片1:", arr[1:4]) # 输出: [20 30 40]
print("切片2:", arr[:3]) # 输出: [10 20 30]
print("切片3:", arr[::2]) # 输出: [10 30 50]
多维数组的索引与切片
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 索引
print("索引1:", arr[1, 2]) # 输出: 6
# 切片
print("切片1:\n", arr[1:, 1:]) # 输出: [[5 6]
# [8 9]]
print("切片2:\n", arr[:2, :2]) # 输出: [[1 2]
# [4 5]]
数组运算
NumPy提供了丰富的数组运算,包括算术运算、比较运算、逻辑运算等。
算术运算
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
# 加法
print("加法:", arr1 + arr2) # 输出: [5 7 9]
# 减法
print("减法:", arr1 - arr2) # 输出: [-3 -3 -3]
# 乘法
print("乘法:", arr1 * arr2) # 输出: [4 10 18]
# 除法
print("除法:", arr1 / arr2) # 输出: [0.25 0.4 0.5 ]
比较运算
# 比较运算
print("大于:", arr1 > 2) # 输出: [False False True]
print("等于:", arr1 == 2) # 输出: [False True False]
逻辑运算
# 逻辑运算
print("逻辑与:", np.logical_and(arr1 > 1, arr2 < 6)) # 输出: [False True True]
print("逻辑或:", np.logical_or(arr1 > 2, arr2 < 6)) # 输出: [ True True True]
数组形状操作
NumPy提供了一些方法来改变数组的形状,如reshape
、ravel
、transpose
等。
改变数组形状
arr = np.arange(1, 7)
# 重塑数组
reshaped_arr = arr.reshape((2, 3))
print("重塑数组:\n", reshaped_arr)
# 拉平数组
flattened_arr = reshaped_arr.ravel()
print("拉平数组:", flattened_arr)
数组转置
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 转置数组
transposed_arr = arr.transpose()
print("转置数组:\n", transposed_arr)
常用函数
NumPy提供了许多用于数组操作的函数,包括统计函数、线性代数函数、随机数生成函数等。
统计函数
arr = np.array([1, 2, 3, 4, 5])
# 求和
print("求和:", np.sum(arr)) # 输出: 15
# 求平均值
print("平均值:", np.mean(arr)) # 输出: 3.0
# 求标准差
print("标准差:", np.std(arr)) # 输出: 1.4142135623730951
# 求最大值
print("最大值:", np.max(arr)) # 输出: 5
# 求最小值
print("最小值:", np.min(arr)) # 输出: 1
线性代数函数
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
# 矩阵乘法
print("矩阵乘法:\n", np.dot(arr1, arr2))
# 矩阵转置
print("矩阵转置:\n", np.transpose(arr1))
# 计算行列式
print("行列式:", np.linalg.det(arr1))
随机数生成
# 生成均匀分布的随机数
uniform_random = np.random.rand(3, 3)
print("均匀分布随机数:\n", uniform_random)
# 生成标准正态分布的随机数
normal_random = np.random.randn(3, 3)
print("正态分布随机数:\n", normal_random)
# 生成指定范围内的随机整数
random_integers = np.random.randint(1, 10, size=(3, 3))
print("随机整数:\n", random_integers)
实际应用示例
数组运算:求矩阵的行和列的平均值
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 求行平均值
row_mean = np.mean(arr, axis=1)
print("行平均值:", row_mean)
# 求列平均值
col_mean = np.mean(arr, axis=0)
print("列平均值:", col_mean)
数组索引:条件筛选数据
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
# 筛选出大于5的元素
filtered_arr = arr[arr > 5]
print("大于5的元素:", filtered_arr)
随机数生成:模拟抛硬币
# 模拟抛硬币100次,0表示正面,1表示反面
coin_flips = np.random.randint(0, 2, size=100)
print("抛硬币结果:", coin_flips)
# 统计正反面次数
heads_count = np.sum(coin_flips == 0)
tails_count = np.sum(coin_flips == 1)
print(f"正面次数: {heads_count}, 反面次数: {tails_count}")
总结
本文详细介绍了NumPy数组的基本操作,包括数组的创建、属性、索引与切片、运算、形状操作以及常用函数。通过具体的示例代码,展示了如何高效地进行数组操作,并且展示了NumPy在数据科学中的实际应用。掌握这些NumPy基础操作,可以帮助大家在数据分析和科学计算中更加得心应手,提高程序的效率和可读性。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。