首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 25-02-18 13:41
  • 4370
  • 7596
blog.csdn.net

文章目录

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

基础

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

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

import numpy as np
x = np.array([1,2,3])
type(x)     # 
  • 1
  • 2
  • 3

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

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

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

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

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

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

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=', ')
  • 1
  • 2

调整形状

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

  • 整平 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],外层的括号都被磨掉了
  • 1
  • 2
  • 3
  • 4

【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 = [123456] y=[14​25​36​]

代码如下。

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

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

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

二元计算

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
  • 1
  • 2
  • 3

其运算逻辑如下

[ 0 10 20 ] + [ 0 1 2 3 4 5 ] = [ 00 01 02 03 04 10 11 12 13 14 20 21 22 23 24 ] [01020]+ [012345] = [000102030410111213142021222324] ​01020​ ​+[0​1​2​3​4​5​]= ​001020​011121​021222​031323​041424​ ​

数组索引

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

代码索引结果含义
x[-1] [ 20 21 22 23 24 ]
[2021222324][2021222324]
[20​21​22​23​24​]
倒数第一行
x[:,1] [ 01 11 21 ]
[011121][011121]
[01​11​21​]
第1列
x[0:2, 1:3] [ 01 02 11 12 ]
[01110212][01021112]
[0111​0212​]
第0到2行;第1到3列的所有元素
x[:2, 1:] [ 01 02 03 04 11 12 13 14 ]
[0111021203130414][0102030411121314]
[0111​0212​0313​0414​]
0:2中的0可以省略
冒号后面什么也不写表示末尾
x[[0,2]] [ 00 01 02 03 04 20 21 22 23 24 ]
[00200121022203230424][00010203042021222324]
[0020​0121​0222​0323​0424​]
索引第0行和第2行
x[[0,2],[1,4]] [ 01 24 ]
[0124][0124]
[01​24​]
索引 ( 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])
  • 1
  • 2
  • 3
注:本文转载自blog.csdn.net的微小冷的文章"https://tinycool.blog.csdn.net/article/details/136406050"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top