Numpy基本操作

在这里插入图片描述

1.什么是Numpy

  NumPy 是一个用于 Python 编程语言的开源库,它的主要功能是支持大型多维数组和矩阵,并提供了大量的数学函数来操作这些数组。NumPy 是 Python 科学计算生态系统的核心组成部分之一,广泛应用于数据分析、科学计算、机器学习等领域。

主要特点:
  高性能数组操作:NumPy 提供了一种高效的多维数组对象,以及用于对其进行操作的函数。这些数组在内存中是连续的,因此可以高效地进行访问和操作。
  广播功能:NumPy 支持数组间的广播操作,即使数组的形状不完全匹配也能执行数学运算。
  矢量化操作:通过矢量化操作,NumPy 可以对整个数组进行操作而无需显式地使用循环,从而极大地提高了代码的执行效率。
  内置数学函数:NumPy 包含了大量的数学函数,如四则运算、三角函数、指数和对数函数等。
  线性代数运算:包括矩阵乘法、求逆、特征值分解等线性代数运算。
  随机数生成:提供了生成各种分布的随机数的功能。
  集成性:NumPy 可以很好地与其他 Python 库集成,如 SciPy、Pandas 和 Matplotlib 等。

The fundamental package for scientific computing with Python --Numpy官方描述
https://numpy.org/ --官网

2.安装

pip install numpy

3.Numpy创建数组

  在Python中使用NumPy库可以非常方便地创建不同维度的数组。下面我将展示如何创建一维、二维和三维的NumPy数组。

3.1.创建一维数组

  一维数组可以看作是一个简单的列表。

import numpy as np

# 使用列表创建一维数组
arr_1d = np.array([1, 2, 3, 4, 5])
print("一维数组:", arr_1d)

3.2.创建二维数组

  二维数组通常用于表示矩阵。

# 使用嵌套列表创建二维数组
arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("二维数组:\n", arr_2d)

3.3.创建三维数组

  三维数组可以看作是多个二维矩阵堆叠在一起。

# 使用嵌套列表创建三维数组
arr_3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print("三维数组:\n", arr_3d)

4.Numpy创建填充矩阵

4.1.全零矩阵

  在 NumPy 中创建一个全零矩阵非常简单,你可以使用 numpy.zeros() 函数。这个函数允许你指定矩阵的形状,并返回一个由零组成的数组。

  下面是一些示例代码,展示如何创建不同维度的全零矩阵:

import numpy as np

# 创建一个一维全零数组
zero_1d = np.zeros(5)
print("一维全零数组:", zero_1d)

# 创建一个二维全零矩阵
zero_2d = np.zeros((3, 4))
print("二维全零矩阵:\n", zero_2d)

# 创建一个三维全零矩阵
zero_3d = np.zeros((2, 3, 2))
print("三维全零矩阵:\n", zero_3d)

  这里,np.zeros() 函数的第一个参数是一个表示数组形状的元组。对于一维数组,只需要提供一个整数;对于二维或更高维的数组,则需要提供一个包含各个维度长度的元组。

4.2.创建单值填充矩阵

  在 NumPy 中创建一个填充有相同值的矩阵可以使用 numpy.full() 函数。这个函数接受一个形状参数和一个填充值参数,返回一个具有指定形状且所有元素都为给定值的数组。

  下面是创建不同维度的单值矩阵的示例代码:

import numpy as np

# 创建一个一维单值数组
single_value_1d = np.full(5, 7)
print("一维单值数组:", single_value_1d)

# 创建一个二维单值矩阵
single_value_2d = np.full((3, 4), 7)
print("二维单值矩阵:\n", single_value_2d)

# 创建一个三维单值矩阵
single_value_3d = np.full((2, 3, 2), 7)
print("三维单值矩阵:\n", single_value_3d)

5.Numpy对比List

  NumPy 数组与 Python 原生 list 在性能上有显著的不同,特别是在科学计算和大规模数据处理方面。以下是两者之间的一些关键区别和性能比较:

5.1.内存占用

  • NumPy 数组 通常比等效的 Python 列表占用更少的内存。这是因为 NumPy 数组中的元素都是同一种数据类型,而 Python 列表中的元素可以是任何类型,这会引入额外的开销。
  • NumPy 数组的内存布局更加紧凑,减少了数据访问的时间。

5.2.计算速度

  • NumPy 数组 在执行数学运算时通常比 Python 列表快得多。这是因为它利用了底层的 C 语言实现来进行高效的向量化操作,避免了 Python 的解释器开销。
  • NumPy 提供了诸如广播(broadcasting)这样的特性,可以在不需要显式循环的情况下执行复杂的数学运算,这大大提高了效率。

5.3.索引和切片

  • 对于索引和切片操作,NumPy 数组通常比 Python 列表更快。NumPy 的索引机制被优化过,可以快速访问数据。

5.4.元素增删

  • Python 列表 在增删元素方面通常比 NumPy 数组表现更好。这是因为列表是动态调整大小的数据结构,而 NumPy 数组的大小一旦创建后通常是固定的。如果需要改变大小,整个数组可能需要重新分配内存,这可能会导致性能下降。

5.5.示例代码

  下面是一个简单的示例来比较 NumPy 数组和 Python 列表在执行加法运算时的速度差异:

import numpy as np
import time

size_of_vec = 1000000

def pure_python_version():
    t1 = time.time()
    X = range(size_of_vec)
    Y = range(size_of_vec)
    Z = [X[i] + Y[i] for i in range(len(X))]
    return time.time() - t1

def numpy_version():
    t1 = time.time()
    X = np.arange(size_of_vec)
    Y = np.arange(size_of_vec)
    Z = X + Y
    return time.time() - t1

t1 = pure_python_version()
t2 = numpy_version()
print(t1, t2)
print("NumPy is in this example {} times faster!".format(t1/t2))

  总结来说,如果你需要高效地处理数值型数据并执行数学运算,那么使用 NumPy 数组会是一个很好的选择。而对于那些需要频繁修改大小或进行复杂数据结构操作的任务,则 Python 列表可能更适合。

6.Numpy切片

  在 NumPy 中,切片是一种非常强大的功能,允许你从数组中选择特定的元素或子集。切片语法类似于 Python 的列表切片语法,但因为 NumPy 数组可以有多维,所以切片也可以应用于多维数组。

6.1.一维数组的切片

  对于一维数组,你可以使用类似于 Python 列表的切片语法:

import numpy as np

# 创建一个一维数组
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])

# 选择第3到第6个元素(索引2到5)
slice1 = arr[2:6]
print("Slice from index 2 to 5:", slice1)

# 选择所有元素,步长为2
slice2 = arr[::2]
print("Every second element:", slice2)

# 选择所有元素,从最后一个开始,步长为-1
slice3 = arr[::-1]
print("Reverse the array:", slice3)

6.2.多维数组的切片

  对于多维数组,你可以在每个维度上指定切片:

# 创建一个二维数组
arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 选择第一行
row1 = arr2d[0, :]
print("First row:", row1)

# 选择第一列
col1 = arr2d[:, 0]
print("First column:", col1)

# 选择第1和第3行的第2列
rows1and3_col2 = arr2d[[0, 2], 1]
print("Element at (0, 1) and (2, 1):", rows1and3_col2)

# 选择中间两行的中间两列
middle_rows_cols = arr2d[1:3, 1:3]
print("Middle 2x2 subarray:\n", middle_rows_cols)

6.3.进阶切片

  除了标准的切片操作外,NumPy 还支持更复杂的切片方式,比如布尔索引和整数索引。

布尔索引

使用布尔数组来索引另一个数组。

# 选择所有大于5的元素
mask = arr > 5
selected_elements = arr[mask]
print("Elements greater than 5:", selected_elements)
整数索引

  使用整数数组来索引另一个数组。

# 选择特定位置的元素
indices = np.array([1, 3, 5])
selected_elements = arr[indices]
print("Selected elements by indices:", selected_elements)

6.4.注意事项

  • 如果没有指定起始或结束索引,则默认从开头或到结尾。
  • 步长可以是负数,这将反向遍历数组。

  这些就是 NumPy 中切片的基本用法。切片操作对于数据处理和分析非常重要,能够让你以简洁的方式提取所需的数据部分。

7.结语

  Numpy是一个强大的数组、矩阵处理工具,可以作为机器学习算法的前置数据生成或处理工具。

  • 19
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的体育馆管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本体育馆管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此体育馆管理系统利用当下成熟完善的SpringBoot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的Mysql数据库进行程序开发。实现了用户在线选择试题并完成答题,在线查看考核分数。管理员管理收货地址管理、购物车管理、场地管理、场地订单管理、字典管理、赛事管理、赛事收藏管理、赛事评价管理、赛事订单管理、商品管理、商品收藏管理、商品评价管理、商品订单管理、用户管理、管理员管理等功能。体育馆管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:体育馆管理系统;SpringBoot框架;Mysql;自动化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海若[MATRIX]

鼓励将是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值