numpy计算模块常见用法

介绍

NumPy是Python的一个数学计算函数库,底层是C实现,执行效率高。它的其核心对象是ndarray N维数组,可以支持大量的维度数组与矩阵运算。

一、numpy常见属性

1.1、对象类型

使用numpy定义x1、x2两个数组,打印它们的类型,可见为ndarray

import numpy as np

x1 = np.array([[1, 2, 3], [4, 5, 6]])
x2 = np.array([1.0, 2.0])

# 输出对象类型
print(type(x1), type(x2))

执行结果

<class 'numpy.ndarray'> <class 'numpy.ndarray'>

1.2、数组维度

通过ndim属性可以获得数组的维度,x1为二维,x2为一维

# 输出数组维度
print(x1.ndim, x2.ndim)

执行结果

2 1

1.3、数组形状

通过shape属性可以获得数组的形状,x1为2行3列,x2是包含两个元素的一维数组

# 输出数组形状
print(x1.shape, x2.shape)

执行结果

(2, 3) (2,)

1.4、数据类型

通过dtype属性可以获得数据类型,x1为int32整型,x2为float64浮点数

# 输出数据类型
print(x1.dtype, x2.dtype)

执行结果

int32 float64

二、数组创建方式

2.1、array()函数

# 直接使用array()函数生成
print(np.array([1, 2, 3]))

执行结果

[1 2 3]

2.2、zeros()函数

# 使用zeros()函数,生成值全为0的数组
print(np.zeros((2, 2)))

执行结果

[[0. 0.]
 [0. 0.]]

2.3、ones()函数

# 使用ones()函数,生成值全为1的数组
print(np.ones((2, 2)))

执行结果

[[1. 1.]
 [1. 1.]]

2.4、full()函数

# 使用full()函数,生成自定义数组,第一个参数是维度,第二参数是值
print(np.full((3, 5), 2))

执行结果

[[2 2 2 2 2]
 [2 2 2 2 2]
 [2 2 2 2 2]]

2.5、arange()函数

# 使用arange()函数生成,下面表示生成值从010之间,步长为2
print(np.arange(0, 10, 2))

执行结果

[0 2 4 6 8]

2.6、linspace()函数

# 使用linspace()函数生成,下面表示从01之间,均匀切分成20个元素
print(np.linspace(0, 1, 10))

执行结果

[0.         0.11111111 0.22222222 0.33333333 0.44444444 0.55555556
 0.66666667 0.77777778 0.88888889 1.        ]

2.7、random()函数

# 使用random()函数,生成随机数,下面表示23print(np.random.random((2, 3)))

执行结果

[[0.90641874 0.01024495 0.59446078]
 [0.17317758 0.88951275 0.10003954]]

2.8、randint()函数

# 使用randint()函数,生成随机整数,low表示最小值,high表示最大值,size表示23print(np.random.randint(low=0, high=10, size=(2, 3)))

执行结果

[[2 5 1]
 [1 4 5]]

2.9、normal()函数

# 使用normal()函数,生成正态分布(高斯分布),loc表示均值为2,scale表示标准差为3,size表示23print(np.random.normal(loc=2, scale=3, size=(2, 3)))

执行结果

[[ 8.19664286  4.76742324  0.14446856]
 [ 3.27381939  2.10445444 -3.01358868]]

2.10、eye()函数

# 使用eye()函数,生成对角线为1的单位矩阵,下面表示5*5
print(np.eye(5))

执行结果

[[1. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0.]
 [0. 0. 1. 0. 0.]
 [0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 1.]]

2.11、reshape()函数

# reshape()函数,下面表示生成值为0-11之间的34列的数组
print(np.arange(0, 12).reshape((3, 4)))

执行结果

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

三、数组索引

定义数组x

x = np.arange(0, 12).reshape((3, 4))
print(x)

3.1、正数索引取值

# 获取第1print(x[0])
# 获取第1print(x[:, 0])
# 获取第1行第2个元素
print(x[0][1])
print(x[0, 1])

执行结果

[0 1 2 3]
[0 4 8]
1
1

3.2、负数索引取值

# 获取最后1print(x[-1])
# 获取最后1print(x[:, -1])

执行结果

[ 8  9 10 11]
[ 3  7 11]

四、数组合并

定义xy两个数组

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

4.1、concatenate()函数

# 使用concatenate()函数合并数组
print(np.concatenate([x, y]))

执行结果

[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]

4.2、vstack()函数

# vstack()函数垂直方向合并数组
print(np.vstack([x, y]))

执行结果

[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]

4.3、hstack()函数

# hstack()函数水平方向合并数组
print(np.hstack([x, y]))

执行结果

[[ 0  1  2  6  7  8]
 [ 3  4  5  9 10 11]]

五、数组拆分

定义数组z

z = np.arange(0, 16).reshape((4, 4))
print(z)

5.1、split()函数

# split()函数拆分数组
z1, z2 = np.split(z, [1])
print(z1)
print(z2)

执行结果

[[0 1 2 3]]
[[ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]

5.2、vsplit()函数

# vsplit()函数垂直方向拆分数组
z3, z4 = np.vsplit(z, [2])
print(z3)
print(z4)

执行结果

[[0 1 2 3]
 [4 5 6 7]]
[[ 8  9 10 11]
 [12 13 14 15]]

5.3、hsplit()函数

# hsplit()函数垂直方向拆分数组
z5, z6 = np.hsplit(z, [2])
print(z5)
print(z6)

执行结果

[[ 0  1]
 [ 4  5]
 [ 8  9]
 [12 13]]
[[ 2  3]
 [ 6  7]
 [10 11]
 [14 15]]

六、数组排序

6.1、sort排序

sort返回元素排序结果

x = np.array([1, 5, 4, 2, 3])
print(np.sort(x))

执行结果

[1 2 3 4 5]	

6.2、argsort排序

argsort返回索引的排序结果

x = np.array([1, 5, 4, 2, 3])
print(np.argsort(x))

执行结果

[0 3 4 2 1]

6.3、指定axis排序

axis=0返回按列排序结果,axis=1返回按行排序结果

np.random.seed(1)
x = np.random.randint(0, 8, (3, 3))
print(x)
print(np.sort(x, axis=0))
print(np.sort(x, axis=1))

执行结果

[[5 3 4]
 [0 7 1]
 [3 5 7]]
[[0 3 1]
 [3 5 4]
 [5 7 7]]
[[3 4 5]
 [0 1 7]
 [3 5 7]]

6.4、按维度排序

通过argsort先对某个维度索引排序,再实现对某个维度元素的整体排序

new_order = np.argsort(x[:, 2])
print(np.argsort(x[:, 2]))
print(x[new_order])

执行结果,实现对第3个维度的排序

[1 0 2]
[[0 7 1]
 [5 3 4]
 [3 5 7]]
基于STM32F407,使用DFS算法实现最短迷宫路径检索,分为三种模式:1.DEBUG模式,2. 训练模式,3. 主程序模式 ,DEBUG模式主要分析bug,测量必要数据,训练模式用于DFS算法训练最短路径,并将最短路径以链表形式存储Flash, 主程序模式从Flash中….zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值