一文详细介绍numpy在python中的用法

 更新时间:2025年01月03日 10:22:36   作者:科技追踪者  
这篇文章主要介绍了numpy在python中的用法,NumPy是Python科学计算库,主要用于处理大型多维数组和矩阵运算,它提供了多种函数进行数组操作,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

NumPy 是 Python 科学计算库中非常重要的库,主要用于处理大型多维数组和矩阵运算。它提供了大量数学函数来操作这些数组。 NumPy 的核心是 ndarray 对象,该对象是一个多维数组,可以存储同类型的数据。

下面是 NumPy 的详细用法和功能介绍:

1. 导入NumPy

在使用 NumPy 之前,需要先导入库,通常我们会将 NumPy 以 np 作为别名:

import numpy as np

2. 创建数组

NumPy 中的数组称为 ndarray,可以通过多种方式创建数组:

a) 使用 array() 创建数组

# 从Python列表创建数组
arr = np.array([1, 2, 3, 4])
print(arr)  # 输出: [1 2 3 4]

# 创建多维数组
arr_2d = np.array([[1, 2], [3, 4]])
print(arr_2d)  # 输出: [[1 2] [3 4]]

b) 使用 zeros()、ones() 和 full() 创建特定值数组

# 创建一个全为0的数组
zeros_arr = np.zeros((2, 3))
print(zeros_arr)  # 输出:[[0. 0. 0.] [0. 0. 0.]]

# 创建一个全为1的数组
ones_arr = np.ones((2, 3))
print(ones_arr)  # 输出:[[1. 1. 1.] [1. 1. 1.]]

# 创建一个指定数值的数组
full_arr = np.full((2, 2), 5)
print(full_arr)  # 输出:[[5 5] [5 5]]

c) 使用 arange() 和 linspace() 创建序列数组

# 创建一个等差序列数组
arr_range = np.arange(0, 10, 2)
print(arr_range)  # 输出:[0 2 4 6 8]

# 创建一个线性间隔数组
arr_linspace = np.linspace(0, 1, 5)
print(arr_linspace)  # 输出:[0.   0.25 0.5  0.75 1.  ]

3. 数组属性

ndarray 对象具有多种属性,可以获取数组的信息:

arr = np.array([[1, 2, 3], [4, 5, 6]])

print(arr.shape)  # 数组的形状 (2, 3)
print(arr.size)   # 数组中的元素数量 6
print(arr.ndim)   # 数组的维度 2
print(arr.dtype)  # 数组元素的数据类型 int64

4. 数组索引和切片

NumPy 数组支持多维索引和切片操作。

a) 一维数组索引

arr = np.array([1, 2, 3, 4, 5])
print(arr[0])   # 输出第一个元素:1
print(arr[-1])  # 输出最后一个元素:5

b) 多维数组索引

arr_2d = np.array([[1, 2, 3], [4, 5, 6]])
print(arr_2d[0, 2])  # 输出第一行第三列的元素:3
print(arr_2d[1, -1]) # 输出第二行最后一个元素:6

c) 切片

# 一维数组切片
arr = np.array([1, 2, 3, 4, 5])
print(arr[1:4])  # 输出: [2 3 4]

# 多维数组切片
arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr_2d[0:2, 1:3])  # 输出:[[2 3] [5 6]]

5. 数学运算

NumPy 可以对数组进行广播机制下的运算。

a) 数组的基本运算

arr = np.array([1, 2, 3])

print(arr + 2)  # 输出:[3 4 5]
print(arr * 3)  # 输出:[3 6 9]
print(arr ** 2) # 输出:[1 4 9]

b) 数组之间的运算

arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])

print(arr1 + arr2)  # 输出:[5 7 9]
print(arr1 * arr2)  # 输出:[4 10 18]

c) 通用函数 (Universal Functions)

NumPy 提供了许多通用的数学函数,可以应用于数组的每个元素,例如 sin()exp()sqrt() 等。

arr = np.array([1, 2, 3])
print(np.sin(arr))  # 输出:数组每个元素的正弦值
print(np.exp(arr))  # 输出:数组每个元素的指数值
print(np.sqrt(arr)) # 输出:数组每个元素的平方根

6. 数组的形状操作

NumPy 提供了许多工具来改变数组的形状。

a) reshape() 改变数组形状

arr = np.array([[1, 2, 3], [4, 5, 6]])
reshaped_arr = arr.reshape((3, 2))
print(reshaped_arr)
# 输出:
# [[1 2]
#  [3 4]
#  [5 6]]

b) 数组转置

arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.T)
# 输出:
# [[1 4]
#  [2 5]
#  [3 6]]

7. 数组的合并和分割

NumPy 支持对数组的合并和分割操作。

a) 数组的合并

arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6]])

# 垂直合并
vstack_arr = np.vstack((arr1, arr2))
print(vstack_arr)  # 输出:[[1 2] [3 4] [5 6]]

# 水平合并
hstack_arr = np.hstack((arr1, arr2.T))
print(hstack_arr)  # 输出:[[1 2 5] [3 4 6]]

b) 数组的分割

arr = np.array([[1, 2, 3], [4, 5, 6]])

# 垂直分割
vsplit_arr = np.vsplit(arr, 2)
print(vsplit_arr)  # 输出两个2x3的数组

# 水平分割
hsplit_arr = np.hsplit(arr, 3)
print(hsplit_arr)  # 输出三个2x1的数组

8. 布尔索引和条件过滤

NumPy 支持布尔条件筛选和索引操作。

arr = np.array([1, 2, 3, 4, 5])
print(arr[arr > 3])  # 输出:[4 5]

# 条件赋值
arr[arr > 3] = 0
print(arr)  # 输出:[1 2 3 0 0]

9. 常用的统计函数

NumPy 提供了丰富的统计函数,方便对数组进行统计计算。

arr = np.array([1, 2, 3, 4, 5])

print(np.mean(arr))  # 平均值:3.0
print(np.sum(arr))   # 总和:15
print(np.std(arr))   # 标准差:1.414
print(np.min(arr))   # 最小值:1
print(np.max(arr))   # 最大值:5

10. 随机数生成

NumPy 的 random 模块提供了生成随机数的功能。

# 生成一个[0, 1)之间的随机浮点数
print(np.random.rand())

# 生成一个服从标准正态分布的随机数
print(np.random.randn())

# 生成一个指定范围内的随机整数
print(np.random.randint(0, 10, (3, 3)))  # 输出一个3x3的随机整数矩阵

11. 广播机制

NumPy 具有广播(broadcasting)机制,是指当操作的两个数组形状不同,但其中一个数组的形状可以通过重复某些维度的元素来匹配另一个数组的形状时,NumPy 会自动进行元素扩展,执行操作。

# 一个 1x3 数组和一个 3x1 数组相加
a = np.array([1, 2, 3])
b = np.array([[1], [2], [3]])

# 广播机制:将b广播为 [1, 2, 3],然后执行加法
result = a + b
print(result)
# 输出:
# [[2 3 4]
#  [3 4 5]
#  [4 5 6]]

12. 数组的矩阵运算

NumPy 中的矩阵运算功能包括矩阵乘法、矩阵转置、求逆等常见的线性代数操作。特别适用于科学计算和机器学习中使用的线性代数方法。

a) 矩阵乘法

@ 符号或 np.dot() 函数可用于矩阵乘法。

# 定义两个矩阵
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

# 矩阵乘法
C = A @ B
print(C)
# 输出:
# [[19 22]
#  [43 50]]

# 使用dot函数
D = np.dot(A, B)
print(D)
# 输出结果与上面相同

b) 矩阵转置

# 矩阵转置
A_T = A.T
print(A_T)
# 输出:
# [[1 3]
#  [2 4]]

d) 计算行列式

使用 np.linalg.det() 计算矩阵的行列式。

A = np.array([[1, 2], [3, 4]])
det_A = np.linalg.det(A)
print(det_A)  # 输出:-2.0

e) 特征值和特征向量

使用 np.linalg.eig() 来计算矩阵的特征值和特征向量。

A = np.array([[1, 2], [3, 4]])
eigenvalues, eigenvectors = np.linalg.eig(A)

print("特征值:", eigenvalues)
print("特征向量:", eigenvectors)
# 输出:
# 特征值: [-0.37228132  5.37228132]
# 特征向量:
# [[-0.82456484 -0.41597356]
#  [ 0.56576746 -0.90937671]]

12. 数组的排序和条件筛选

a) 排序

使用 np.sort() 函数对数组进行排序。该函数会返回一个排序后的数组,而不会修改原数组。

a = np.array([3, 1, 2, 4])
sorted_a = np.sort(a)
print(sorted_a)  # 输出:[1 2 3 4]

b) 条件筛选

NumPy 提供了灵活的条件筛选操作,可以用布尔数组来选择满足条件的元素。

# 创建一个数组
a = np.array([1, 2, 3, 4, 5])

# 筛选出大于2的元素
filtered_a = a[a > 2]
print(filtered_a)  # 输出:[3 4 5]

# 使用where条件筛选
b = np.where(a > 2, a, -1)  # 大于2的保持原值,否则设为-1
print(b)  # 输出:[-1 -1  3  4  5]

总结 

到此这篇关于numpy在python中用法的文章就介绍到这了,更多相关python中numpy用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Pandas中迭代DataFrame行的方法总结

    Pandas中迭代DataFrame行的方法总结

    Python是进行数据分析的一种很好的语言,主要是因为以数据为中心的Python包的奇妙生态系统,本文主要为大家介绍了如何在Pandas中迭代DataFrame中的行,有需要的可以参考下
    2023-09-09
  • python验证码识别教程之利用滴水算法分割图片

    python验证码识别教程之利用滴水算法分割图片

    这篇文章主要给大家介绍了关于python验证码识别教程之利用滴水算法分割图片的相关资料,文章中通过示例代码介绍的非常详细,对大家的学习或者具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-06-06
  • Python利用ElementTree模块处理XML的方法详解

    Python利用ElementTree模块处理XML的方法详解

    ElementTree是python的XML处理模块,它提供了一个轻量级的对象模,下面这篇文章就来给大家介绍了关于Python利用ElementTree模块处理XML的方法,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-08-08
  • python中pip安装、升级以及升级固定的包

    python中pip安装、升级以及升级固定的包

    我们知道python有大量的第三方库,这也是python的优势之一,pip就是python整的软件包管理系统,类似于Linux平台的yum仓库,下面这篇文章主要给大家介绍了关于python中pip安装、升级以及升级固定包的相关资料,需要的朋友可以参考下
    2022-02-02
  • 一文详细NumPy中np.empty的用法

    一文详细NumPy中np.empty的用法

    np.empty是NumPy库中一个强大但潜在危险的工具,本文主要介绍了一文详细NumPy中np.empty的用法,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • OpenCV实现相机标定

    OpenCV实现相机标定

    这篇文章主要为大家详细介绍了OpenCV实现相机标定,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • Python一行代码识别增值税发票实现示例

    Python一行代码识别增值税发票实现示例

    这篇文章主要为大家介绍了Python一行代码识别增值税发票实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • python中redis的安装和使用

    python中redis的安装和使用

    本文给大家介绍的是在Python中安装和使用redis数据库的方法以及简单示例,有需要的小伙伴可以参考下
    2016-12-12
  • 解决Python中导入自己写的类,被划红线,但不影响执行的问题

    解决Python中导入自己写的类,被划红线,但不影响执行的问题

    这篇文章主要介绍了解决Python中导入自己写的类,被划红线,但不影响执行的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • python数据类型强制转换实例详解

    python数据类型强制转换实例详解

    这篇文章主要介绍了python数据类型强制转换实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06

最新评论