掘金 人工智能 6小时前
python入门系列二十五(numpy 必知必会科学计算库)
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文介绍了Numpy,一个Python科学计算的基础库。它以高性能、低消耗和丰富的科学计算功能著称。文章通过案例展示了Numpy在计算速度上的优势,并详细讲解了Numpy的核心数据结构ndarray,包括数组的创建方式(从列表、元组、特殊数组、序列等)、数组属性(维度、形状、元素总数等)以及数组的索引和切片操作。此外,还介绍了数组的形状操作、数学运算和广播机制,以及常用的统计与聚合函数,帮助读者快速掌握Numpy的基本使用。

🚀 Numpy是Python科学计算的基础库,以其高性能、低消耗和丰富的科学计算功能而闻名,是机器学习、数据分析等领域的核心依赖。

🔢 Numpy的核心数据结构是ndarray,即n维数组,它提供了多种创建方式,包括从Python列表、元组创建,以及创建全零、全一、单位矩阵等特殊数组,还支持通过arange和linspace创建序列。

📊 Numpy提供了丰富的数组属性查询功能,如ndim(维度数)、shape(形状)、size(元素总数)、dtype(数据类型)和itemsize(每个元素字节数),方便用户了解数组的结构。

🔪 Numpy支持灵活的数组索引和切片操作,类似于Python列表切片,可以方便地访问和修改数组中的元素,还支持布尔索引,根据条件筛选数组元素。

➕ Numpy实现了强大的广播机制,允许不同形状的数组进行数学运算,简化了代码编写,提高了计算效率,同时还提供了丰富的数学运算函数和统计聚合函数。

1.引言

numpy单词拆解开来看,有两部分:numerical+python。是python科学计算基础库,提供高性能多维数组对象和数学工具,在很多应用领域作为基础核心的存在。比如:

等等。如果我们用一句话来归纳numpy的优势,那就是高性能低消耗能力丰富的科学计算库。具体拆开看执行速度快,资源消耗少,丰富数学函数。

2.案例

2.1.环境准备

使用numpy库,需要安装一下。

pip install numpy

2.2.初步体验

前面介绍说numpy是高性能的科学计算库,如何高性能,我们先来直观看一个案例:通过比较python列表和numpy实现100万元素平方计算耗时

import timeimport numpy as np# Python列表实现平方py_list = list(range(1000000))start = time.time()py_squares = [x**2 for x in py_list]print(f"Python耗时: {time.time()-start:.4f}s")# NumPy实现平方np_arr = np.arange(1000000)start = time.time()np_squares = np_arr ** 2print(f"NumPy耗时: {time.time()-start:.4f}s")

通过案例结果,我们看到numpy的高性能名不虚传,比起python列表操作,存在数量级的提升优势!

2.3.核心数据结构

numpy库的核心数据结构:ndarray 。即n维数组。

2.3.1.数组常见常见方式

基础创建方法:

import numpy as np# 数组基础创建方法# 从Python列表创建,一维数组list_arr = np.array([1, 2, 3])print(f"从Python列表创建,一维数组{list_arr }")# 从元组创建,一维数组tuple_arr = np.array((4, 5, 6))print(f"从元组创建,一维数组{tuple_arr}")# 二维数组(矩阵)matrix = np.array([[1, 2], [3, 4]])print(f"创建二维数组(矩阵){matrix}")

特殊数组:

import numpy as np# 特殊数组创建方法# 创建2行3列全0数组zeros = np.zeros((2,3))print(f"2行3列全0数组{zeros}")# 创建一维全1数组ones = np.ones((3,))print(f"一维全1数组{ones}")# 创建3x3单位矩阵identity = np.eye(3)print(f"3x3单位矩阵{identity}")# 创建2x2随机数组(0-1均匀分布)random_arr = np.random.rand(2,2)print(f"2x2随机数组{random_arr}")

序列:

import numpy as np# 序列创建方法# 创建0到10的序列,步长为2range_arr = np.arange(0, 10, 2)print(range_arr)# 创建0到1等差数列,元素个数为5linspace_arr = np.linspace(0, 1, 5) # [0. 0.25 0.5 0.75 1.]print(linspace_arr)

2.3.2.数组属性

除了创建n维数组,在实际应用中,我们还需要关心数组相关的属性。

import numpy as np# 数组相关属性# 创建一个2行3列的二维数组arr = np.array([[1,2,3],[4,5,6]])print("维度数:", arr.ndim)     print("形状:", arr.shape)print("元素总数:", arr.size)print("数据类型:", arr.dtype)print("每个元素字节数:", arr.itemsize)

2.4.数组索引操作

2.4.1.索引切片

切片的概念如同python列表切片,含义上是一样的,我们看具体操作

import numpy as np# 数组切片操作#  创建一个3行3列的数组arr = np.array([[1, 2, 3],                [4, 5, 6],                [7, 8, 9]])# 第0行第1列print(f"第0行第1列:{arr[0, 1]}")# 所有行第1列print(f"所有行第1列:{arr[:, 1]}")# 隔行隔列print(f"隔行隔列:{arr[::2, ::2]}")# 布尔索引mask = arr > 5print(f"布尔索引:{arr[mask]}")

2.4.2.形状操作

import numpy as np# 形状操作# 改变形状arr = np.arange(6)# 调整形状为2行3列reshaped = arr.reshape(2,3)print(f"调整形状为2行3列:{reshaped}")# 转置操作:3行2列transposed = reshaped.Tprint(f"转置操作:{transposed}")# 拼接数组a = np.array([1,2])b = np.array([3,4])concat = np.concatenate([a,b])print(f"拼接数组:{concat}")# 分割数组:分成3个等长数组split_arr = np.split(np.arange(9), 3)print(f"分割数组:{split_arr}")

2.5.数学运算广播机制

2.5.1.基础运算

import numpy as np# 数学基础运算a = np.array([1,2,3])b = np.array([4,5,6])print("加法:", a + b)print("乘法:", a * 2)print("矩阵乘法:", a.dot(b))print("三角函数:", np.sin(a))print("指数运算:", np.exp(a))

2.5.2.广播机制

广播机制有三条法则:

import numpy as np# 广播机制# 标量与数组运算print(10 * np.ones((2,3)))# 不同维度运算A = np.array([[1,2],[3,4]])  # (2,2)B = np.array([10,20])        # (2,)print(A + B)  # B广播为[[10,20],[10,20]]

2.6.统计与聚合函数

2.6.1.常用统计方法

import numpy as np# 常用统计方法# 100个正态分布数data = np.random.normal(0, 1, 100)print(f"100个正态分布数{data}")print("均值:", np.mean(data))print("标准差:", np.std(data))print("中位数:", np.median(data))print("最大值索引:", np.argmax(data))print("累计乘积:", np.cumprod([1,2,3,4]))

2.6.2.轴方向计算

import numpy as np# 轴方向计算arr = np.array([[1,2], [3,4], [5,6]])print("列求和:", arr.sum(axis=0))print("行最大值:", arr.max(axis=1))print("整体均值:", arr.mean())

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Numpy 科学计算 ndarray 广播机制
相关文章