Python科学计算源头:数组详解

2024-03-03 09:44

本文主要是介绍Python科学计算源头:数组详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 基础
    • 调整形状
    • 二元计算
    • 数组索引

基础

numpy是python中最常用的科学计算包,而数组则是是numpy的核心类型,也是Python称为科学计算领域首选语言的关键类型,可以不夸张地说,正是数组类型的强大与易用性,筑就了Python帝国。

在Python中,数组最简单的创建方式是调用array函数,可将元组或列表转换为数组

import numpy as np
x = np.array([1,2,3])
type(x)     # <class 'numpy.ndarray'>

与python自带的range类似,numpy提供了arange函数,可快速生成一个序列

x = np.arange(5)
print(x)    # 0 1 2 3 4

除了arange之外,numpy中另一个出现频率很高的数组是随机数组【rand】,例如想要创建一个 2 × 3 2\times3 2×3的随机数组,可以写作

R = np.random.rand(2,3)

和列表或者元组相比,同维度的数组之间可以直接计算,并且数组也可以和单个的数值进行计算。此外,数组内置了

z = x + 1j
print(z.real, z.imag)

real和imag是数组的内置属性,表示实部和虚部。除此之外,数组的内置属性大致可分为三类,即

  • 类型信息:dtype
  • 内存信息:itemsize, nbytes, stirdes, data, flags
  • 维度特征:ndim, shape, size,转置T,展平flat

dtype即数组中元素的数据类型,除了python自带的类型之外,numpy额外封装了多种类型,比如np.uint8表示8为无符号整型;np.float64表示64位浮点型,可以据此推测其他类型的表示方法。

内存信息类属性,主要存储了数组在内存中所占字节数以及存储状态等,在计算式较少用到。

数组的维度特征是最常遇到的数组属性,其中ndim表示数组的维度;shape表示数组的形状;size为数组的元素个数。例如,对于数组 R R R而言,其ndim为2,shape为 2 × 3 2\times3 2×3,size为6。

属性T是数组的转置,flat将把数组整形成一维,但并不会返回一个一维数组,而是得到一个一维数组的迭代游标,并用于遍历

for r in R.flat:print(r, end=', ')

调整形状

数组中的数据在内存里是固定的,但计算时的排列方式却可以随时更改,这也是数组的强大之处。数组中内置了一些用于调整形状的方法,主要有以下三种

  • 整平 flatten, ravel, squeeze
  • 重置形状 reshape, resize
  • 调整坐标轴 transpose, swapaxes

flatten和reval可以将数组展平成一维,相当于得到属性flat所对应的数组。squeeze相对比较温和,会摘掉删除尺寸为1的维度,例如

a = np.array([[[[1,2]]]])
print(x.shape) # (1, 1, 1, 2)
print(a.squeeze())
# 返回值为[1,2],外层的括号都被磨掉了

【reshape】和【resize】功能相同,用于重置数组的形状,区别是前者返回新数组,后者则直接修改原始数组。以reshape为例,可实现将 [ 1 , 2 , 3 , 4 , 5 , 6 ] [1,2,3,4,5,6] [1,2,3,4,5,6]整形为

y = [ 1 2 3 4 5 6 ] y = \begin{bmatrix}1&2&3\\4&5&6\end{bmatrix} y=[142536]

代码如下。

x = np.arange(6)
y = x.reshape(2,3)

【transpose】和【swapaxes】用于调整坐标轴,如果用矩阵的视角去理解,那么大致相当于转置。以transpose为例,其输入参数为将要调整的坐标轴

x.transpose(1,0)
'''返回值如下
array([[ 0,  3],[ 1,  4],[ 2,  5]])
'''

二元计算

Numpy重载常用的数学运算、比较运算以及位运算的运算符,除此之外,Numpy还实现了矩阵乘法@

Numpy的有一个强大的功能,即broadcast,一般被翻译成广播,即允许不同维度的数组进行计算,在下面的案例中, x x x为1行3列, y y y为2行1列,二者相加后变成3行5列的矩阵。

A = np.arange(3).reshape(3,1)*10
B = np.arange(5).reshape(1,5)
x = A + B

其运算逻辑如下

[ 0 10 20 ] + [ 0 1 2 3 4 5 ] = [ 00 01 02 03 04 10 11 12 13 14 20 21 22 23 24 ] \begin{bmatrix}0\\10\\20\end{bmatrix}+ \begin{bmatrix}0&1&2&3&4&5\end{bmatrix} = \begin{bmatrix} 00&01&02&03&04\\10&11&12&13&14\\20&21&22&23&24\\ \end{bmatrix} 01020 +[012345]= 001020011121021222031323041424

数组索引

和Python中的其他容器一样,数组通过[]索引,支持:格式,索引号从0开始,负数表示从后向前索引。下表以 x x x为例,演示numpy的索引方法。

代码索引结果含义
x[-1] [ 20 21 22 23 24 ] \begin{bmatrix}20&21&22&23&24\end{bmatrix} [2021222324]倒数第一行
x[:,1] [ 01 11 21 ] \begin{bmatrix}01&11&21\end{bmatrix} [011121]第1列
x[0:2, 1:3] [ 01 02 11 12 ] \begin{bmatrix}01&02\\11&12\end{bmatrix} [01110212]第0到2行;第1到3列的所有元素
x[:2, 1:] [ 01 02 03 04 11 12 13 14 ] \begin{bmatrix}01&02&03&04\\11&12&13&14\end{bmatrix} [0111021203130414]0:2中的0可以省略
冒号后面什么也不写表示末尾
x[[0,2]] [ 00 01 02 03 04 20 21 22 23 24 ] \begin{bmatrix}00&01&02&03&04\\20&21&22&23&24\end{bmatrix} [00200121022203230424]索引第0行和第2行
x[[0,2],[1,4]] [ 01 24 ] \begin{bmatrix}01&24\end{bmatrix} [0124]索引 ( 0 , 1 ) , ( 2 , 4 ) (0,1), (2,4) (0,1),(2,4)这两个点

此外,numpy数组支持更高级的冒号写法,以x[1:8:2]为例,表示以2为间隔索引从1到8的数据。

x = np.arange(10)
x[1:8:2]
#[1, 3, 5, 7])

这篇关于Python科学计算源头:数组详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/769226

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

MyBatis常用XML语法详解

《MyBatis常用XML语法详解》文章介绍了MyBatis常用XML语法,包括结果映射、查询语句、插入语句、更新语句、删除语句、动态SQL标签以及ehcache.xml文件的使用,感兴趣的朋友跟随小... 目录1、定义结果映射2、查询语句3、插入语句4、更新语句5、删除语句6、动态 SQL 标签7、ehc

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符