头图

大家好,我是涛哥,本文内容来自 涛哥聊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提供了一些方法来改变数组的形状,如reshaperaveltranspose等。

改变数组形状

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基础操作,可以帮助大家在数据分析和科学计算中更加得心应手,提高程序的效率和可读性。


涛哥聊Python
59 声望37 粉丝