NumPy中的形状维度尺度计算、算术与矩阵运算、统计运算、差分和累计运算、排序与索引运算、布尔运算等的使用方法和程序举例

NumPy中的形状维度尺度计算、算术与矩阵运算、统计运算、差分和累计运算、排序与索引运算、布尔运算等的使用方法和程序举例

目录

在之前的博文中介绍了Numpy多维数组的生成(链接: 使用NumPy工具包生成一维、二维以及多维数组方法和具体举例)和Numpy数组的任意切片方法(链接: Numpy数据中的行切片、列切片以及行列结合的数据切片方法及具体代码举例)内容,本节介绍了Numpy使用中的常用运算,重点将对NumPy中的形状维度尺度计算、算术与矩阵运算、统计运算、差分和累计运算、排序与索引运算、布尔运算等进行了介绍。

之前的本博主写的有关Numpy的文章:
博文1: 使用NumPy工具包生成一维、二维以及多维数组方法和具体举例

博文2:Numpy数据中的行切片、列切片以及行列结合的数据切片方法及具体代码举例

博文3:numpy.reshape的语法参数介绍和用法举例

1.Numpy形状、维度、长度计算

1.1 计算数组的形状计算——A1.shape

NumPy数组A1的shape属性是整数的元组。每个整数表示所对应轴的元素数量。

例子:

import numpy as np
A1=np.array([[2,0,2,5],[0,6,2,7],[1,5,4,5]])
print(A1)
A1.shape  #计算形状
print('A1的形状是',A1.shape)

运行结果:

[[2 0 2 5]
 [0 6 2 7]
 [1 5 4 5]]
A1的形状是 (3, 4)

1.2 计算数组维度计算——A1.ndim

维度ndim属性等于形状元组的长度。即:A1.ndim=len(A1.shape)

import numpy as np
A1=np.array([[2,0,2,5],[0,6,2,7],[1,5,4,5]])
print(A1)
A1.ndim  # 计算维度
print('A1是一个',A1.ndim,'个维度的数组!')

运行结果:

[[2 0 2 5]
 [0 6 2 7]
 [1 5 4 5]]
A1是一个 2 个维度的数组!
len(A1.shape)

运行结果:

2

1.3 计算数组长度计算——A1.size或np.size()

(1)计算整个数组长度
import numpy as np
A1=np.array([[2,0,2,5],[0,6,2,7],[1,5,4,5]])
print(A1)
A1.size  # 元素数量
print('A1是一个具有',A1.size,'个元素的数组!')

运行结果:

[[2 0 2 5]
 [0 6 2 7]
 [1 5 4 5]]
A1是一个具有 12 个元素的数组!
(2)计算数组的行数——采用np.size(A1,0)
import numpy as np
A1=np.array([[2,0,2,5],[0,6,2,7],[1,5,4,5]])
print(A1)
np.size(A1,0)  # 求行数
print('A1是一个',np.size(A1,0),'行的数组!')

运行结果:

[[2 0 2 5]
 [0 6 2 7]
 [1 5 4 5]]
A1是一个 3 行的数组!
(3)计算数组的列数——采用np.size(A1,1)
import numpy as np
A1=np.array([[2,0,2,5],[0,6,2,7],[1,5,4,5]])
print(A1)
np.size(A1,1)  # 求列数
print('A1是一个',np.size(A1,1),'列的数组!')

运行结果:

[[2 0 2 5]
 [0 6 2 7]
 [1 5 4 5]]
A1是一个 4 列的数组!

2.基本运算

2.1 加减运算

import numpy as np

A2=np.array([[1,3,5,7],[2,4,6,8]])
B2=np.array([[1,0,1,0],[-1,0,-1,0]])
print('A2+B2=',A2+B2)  # 对应元素相加
print('A2-B2=',A2-B2)  # 对应元素相减

运行结果:

A2+B2= [[2 3 6 7]
 [1 4 5 8]]
A2-B2= [[0 3 4 7]
 [3 4 7 8]]

2.2 数组对应元素乘法和除法、取余运算

(1) Hadamard积——对应元素相乘

星号*执行Hadamard积,即将两个形状相等的矩阵对应元素相乘。

import numpy as np

A2=np.array([[1,3,5,7],[2,4,6,8]])
B2=np.array([[1,0,1,0],[-1,0,-1,0]])
print('A2*B2=',A2*B2)  # 对应元素相乘

运行结果:

A2*B2= [[ 1  0  5  0]
 [-2  0 -6  0]]
(2) 对应元素除法
import numpy as np

A2=np.array([[1,3,5,7],[2,4,6,8]])
B2=np.array([[1,0,1,0],[-1,0,-1,0]])
print('B2/A2=',B2/A2)  # 对应元素相除

运行结果:

B2/A2= [[ 1.          0.          0.2         0.        ]
 [-0.5         0.         -0.16666667  0.        ]]
(3) 对应元素取余
import numpy as np

A22=np.array([[1,3,5,7],[2,4,6,8]])
B22=np.array([[1,0,1,0],[5,7,11,15]])

print(B22%A22)  #对应元素取余运算

运行结果:

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

2.3 矩阵乘法——使用@ 或者np.matmul(A,B)

import numpy as np
A3=np.array([[1,3],[2,4]])
B3=np.array([[1,0],[-1,0]])
A3@B3    #矩阵乘法,等价于np.matmul(A3,B3)

运行结果(也如图1运行结果):

array([[-2,  0],
       [-2,  0]])
np.matmul(A3,B3)  #矩阵乘法,等价于A3@B3 

运行结果(也如图1运行结果):

array([[-2,  0],
       [-2,  0]])

在这里插入图片描述
图1 Numpy中数组的矩阵乘法运算

3. 产生特殊数组运算

3.1 给定步长产生均匀等间隔一维度的numpy数组——np.arrange(start,stop,step)

creates a new 1D numpy array with evenly spaced values
创建具有均匀间隔值的新1D numpy数组.

import numpy as np
A4=np.arange(2,19,4)
print('A4=',A4)

运行结果:

A4= [ 2  6 10 14 18]

3.2 给定数量产生均匀等间隔一维度的numpy数组——np.linspace(start,stop,num)

import numpy as np
A5=np.linspace(2,19,4)
print('A5=',A5)

运行结果:

A5= [ 2.          7.66666667 13.33333333 19.        ]

4.统计运算

4.1 求整个数组的最小值和最大值

import numpy as np
A6=np.arange(10,100,10).reshape(3,3)
print(A6)
print('{0}为整个矩阵中最小'.format(A6.min()))
print('{0}为整个矩阵中最大'.format(A6.max()))

运行结果:

[[10 20 30]
 [40 50 60]
 [70 80 90]]
10为整个矩阵中最小
90为整个矩阵中最大

4.2 求均值

import numpy as np
A6=np.arange(10,100,10).reshape(3,3)
print(A6)
print('{0}为整个矩阵的均值'.format(A6.mean()))
print('{0}为整个矩阵的均值'.format(np.average(A6)))

运行结果:

[[10 20 30]
 [40 50 60]
 [70 80 90]]
50.0为整个矩阵的均值
50.0为整个矩阵的均值

4.3 求标准差和方差

import numpy as np
A6=np.arange(10,100,10).reshape(3,3)
print(A6)
print('{0}为整个矩阵中标准差'.format(A6.std()))
print('{0}为整个矩阵中方差'.format(A6.var()))

运行结果:

[[10 20 30]
 [40 50 60]
 [70 80 90]]
25.81988897471611为整个矩阵中标准差
666.6666666666666为整个矩阵中方差

4.4 求每列或每行的最大值或最小值

(1)求每列最大值或最小值
import numpy as np
A6=np.arange(10,100,10).reshape(3,3)
print(A6)
print('{0}为每列中的最小值'.format(A6.min(axis=0)))
print('{0}为每列中的最大值'.format(A6.max(axis=0)))

运行结果:

[[10 20 30]
 [40 50 60]
 [70 80 90]]
[10 20 30]为每列中的最小值
[70 80 90]为每列中的最大值
(2)求每行最大值或最小值
import numpy as np
A6=np.arange(10,100,10).reshape(3,3)
print(A6)
print('{0}为每行中的最小值'.format(A6.min(axis=1)))
print('{0}为每行中的最大值'.format(A6.max(axis=1)))

运行结果:

[[10 20 30]
 [40 50 60]
 [70 80 90]]
[10 40 70]为每行中的最小值
[30 60 90]为每行中的最大值

5. 差分和累加计算

5.1 差分计算——np.diff(A)

import numpy as np
A7=np.array([[10,3,15,7],[21,43,66,8]])
A8=np.diff(A7)
print('A8=',A8)

运行结果:

A8= [[ -7  12  -8]
 [ 22  23 -58]]

5.2 差加计算——np.cumsum(A)

import numpy as np
A7=np.array([[10,3,15,7],[21,43,66,8]])
A9=np.cumsum(A7)
print('A9=',A9)

运行结果:

A9= [ 10  13  28  35  56  99 165 173]

6. 升序排序运算

例子:给数组进行升序排序

import numpy as np
A7=np.array([[10,3,15,7],[21,43,66,8]])
A10=np.sort(A7)
print('A10=',A10)

运行结果:

A10= [[ 3  7 10 15]
 [ 8 21 43 66]]

7.索引求解

7.1 数组进行升序排序前的索引求解

import numpy as np
A7=np.array([[10,3,15,7],[21,43,66,8]])
print(A7)
index1=np.argsort(A7)
print('index1=',index1)

运行结果:

[[10  3 15  7]
 [21 43 66  8]]
index1= [[1 3 0 2]
 [3 0 1 2]]

7.2 整个数组最大值位置的索引求解

import numpy as np
A7=np.array([[10,3,15,7],[21,43,66,8]])
print(A7)
index2=np.argmax(A7)
print('index2=',index2)

运行结果:

[[10  3 15  7]
 [21 43 66  8]]
index2= 6

7.3 整个数组中非零元素位置索引求解

import numpy as np
A11=np.array([[0,0,15,7],[0,0,0,8]])
print(A7)
index3=np.nonzero(A7)
print('index3=',index3)

运行结果:

[[10  3 15  7]
 [21 43 66  8]]
index3= (array([0, 0, 0, 0, 1, 1, 1, 1]), array([0, 1, 2, 3, 0, 1, 2, 3]))

8.布尔运算

8.1 比较大小运算

import numpy as np
A12=np.arange(0,10)
print('A12=',A12)
A13=A12>4
print('A13=',A13)

运行结果:

A12= [0 1 2 3 4 5 6 7 8 9]
A13= [False False False False False  True  True  True  True  True]

8.2 位或运算——采用A|B

import numpy as np
A12=np.arange(0,10)
print('A12=',A12)
A14=(A12>4)|(A12<2)    # 注意此处不能使用A14=(A12>4) or (A12<2)  否则报错
print('A14=',A14)

运行结果:

A12= [0 1 2 3 4 5 6 7 8 9]
A14= [ True  True False False False  True  True  True  True  True]

8.3 位与运算——采用A&B

import numpy as np
A12=np.arange(0,10)
print('A12=',A12)
A15=(A12>4)&(A12<7)
print('A15=',A15)

运行结果:

A12= [0 1 2 3 4 5 6 7 8 9]
A15= [False False False False False  True  True False False False]

8.4 位非运算——采用~A

import numpy as np
A12=np.arange(0,10)
print('A12=',A12)
A15=(A12>4)&(A12<7)
print('A15=',A15)
A16=~A15   #此处不能使用 not A15
print('A16=',A16)

运行结果:

A12= [0 1 2 3 4 5 6 7 8 9]
A15= [False False False False False  True  True False False False]
A16= [ True  True  True  True  True False False  True  True  True]

8.5 位异或运算——采用A^B

import numpy as np
A12=np.arange(0,10)
print('A12=',A12)
A15=(A12>4)&(A12<7)
print('A15=',A15)
A16=~A15   #此处不能使用 not A15
print('A16=',A16)
A17=A15 ^ A16                 #   此处等价于 A15 != A16 
print('A17=',A17)

运行结果:

A12= [0 1 2 3 4 5 6 7 8 9]
A15= [False False False False False  True  True False False False]
A16= [ True  True  True  True  True False False  True  True  True]
A17= [ True  True  True  True  True  True  True  True  True  True]
A18=A15 != A16                 #   此处等价于 A15 ^ A16 
print('A18=',A18)

运行结果:

A18= [ True  True  True  True  True  True  True  True  True  True]

8.6 逻辑异或运算——采用A != B

A19=np.array([9,8,7,6,5,4,3,2,1,0])
A19 ^ A12   # 逐个元素转换成二进制进行位与运算

运行结果:

array([9, 9, 5, 5, 1, 1, 5, 5, 9, 9])
A19 != A12  # 逐个元素进行位与运算   此时的A19 ^ A12  与A19 != A12不等效。

运行结果:

array([ True,  True,  True,  True,  True,  True,  True,  True,  True,
        True])

注意:位逻辑运算时候,参与运算的数组的元素要是整数或逻辑值Ture或False,而不能是小数等其他值。

9. 总结

在之前的博文中介绍了Numpy数组的生成和Numpy数组的切片内容,本节介绍了Numpy使用中的常用运算,重点对NumPy中的形状维度尺度计算、算术与矩阵运算、统计运算、差分和累计运算、排序与索引运算、布尔运算等进行了介绍,以加深对NumPy工具包的熟练使用。

源码链接: https://pan.quark.cn/s/fa13cd6c6c8d Chrome浏览器作为一款备受青睐的网页浏览器,凭借其出色的稳定性运行速度获得了广泛认可。 然而出于安全考量,Chrome系统默认不兼容ActiveX插件,因为ActiveX技术主要应用于Internet Explorer,它赋予网页内容用户本地系统交互的能力,但同时也可能引发潜在的安全隐患。 不过在某些特定工作场景下,比如在企业内部网络环境或需要老旧应用程序整合时,可能仍需在Chrome中启用ActiveX控件。 为此我们必须掌握在Chrome浏览器下加载运用ActiveX的方法。 首先需要明确ActiveX的本质。 ActiveX是由微软设计的一种技术框架,旨在开发可在网页环境中运行的控件,这些控件能够完成多种功能,包括视频播放、应用程序组件运行或硬件设备通信等。 ActiveX控件多以OCX(OLE控件)格式发布。 在Chrome浏览器中启用ActiveX需要采取额外措施,因为该浏览器本身并不支持此项技术。 以下是几种常见的解决方案: 1. **应用Chrome的兼容性设置**:部分Chrome版本提供了" --enable-internal-activex"命令行参数,可通过此参数使浏览器具备加载ActiveX控件的能力。 用户可在启动Chrome时,于快捷方式的目标路径后附加该参数来激活此功能。 例如:"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --enable-internal-activex。 2. **安装第三方插件**:市面上存在一些第三方插件,例如"IE Tab"或"ActiveX Con...
标题SpringBoot微信小程序结合的健康饮食平台研究AI更换标题第1章引言介绍健康饮食平台的研究背景、意义、国内外研究现状、论文方法及创新点。1.1研究背景意义阐述健康饮食平台在当前社会的重要性及其市场需求。1.2国内外研究现状分析国内外健康饮食平台的发展现状及趋势。1.3研究方法及创新点概述本文采用的研究方法技术创新点。第2章相关理论总结健康饮食、SpringBoot及微信小程序的相关理论。2.1健康饮食理论介绍健康饮食的基本原则营养学知识。2.2SpringBoot框架阐述SpringBoot框架的特点、优势及在项目中的应用。2.3微信小程序技术介绍微信小程序的开发技术、特点及其用户群体。第3章健康饮食平台设计详细介绍健康饮食平台的设计方案,包括前端后端设计。3.1平台架构设计给出平台的整体架构、模块划分及交互流程。3.2数据库设计介绍数据库的设计思路、表结构及数据关系。3.3前后端交互设计阐述前后端数据交互的方式、接口设计及安全性考虑。第4章微信小程序实现介绍微信小程序的具体实现过程,包括页面设计、功能实现等。4.1页面设计布局给出微信小程序的页面设计思路、布局及交互效果。4.2功能实现测试详细介绍微信小程序各项功能的实现过程及测试方法。4.3用户体验优化阐述如何提升微信小程序的用户体验,包括界面优化、性能优化等。第5章平台测试优化对健康饮食平台进行测试,并根据测试结果进行优化。5.1测试环境数据介绍测试环境、测试数据及测试方法。5.2测试结果分析从功能、性能、用户体验等方面对测试结果进行详细分析。5.3平台优化策略根据测试结果提出平台优化策略,包括代码优化、功能改进等。第6章结论展望总结本文的研究成果,并展望未来的研究方向。6.1研究结论概括本文的主要研究结论平台实现效果。6.2展望指出本文研究的不足之处以及未来研究的方向改进点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值