Xmy的Python----Numpy库

article/2025/8/14 9:24:55

目录

例题10-1:创建数组并查看数组属性

 构造复杂数组

 生成随机数

 例题10-2:绘制:随机生成10000数据,服从均值为0,方差为1的正态分布的直方图(间隔个数:50)

 通过索引访问数组

 数组的迭代

 数组间的四则运算

 一个数与数组的四则运算

 比较运算

 逻辑运算

 数组的转置

 数组的点积运算

 NumPy矩阵运算

 例题10-4:数组、矩阵之间的线性代数运算

 保存一个数组

 保存多个数组

 例题10-5:编写程序,读取数据,保存在文件.csv中。

 例题10-6:读.txt文件


例题10-1:创建数组并查看数组属性

import numpy as np                        # 导入Numpy库arr1 = np.array([1, 2, 3, 4])             # 创建的一维数组,参数为列表
print("数组的尺寸:", np.shape(arr1))      # (4, )  ,  一个元素的元组,表示是一维数组arr2 = np.array([[1, 2, 3, 4], [4, 5, 6, 7], [7, 8, 9, 10]])   # 创建二维数组
print("数组的尺寸:", np.shape(arr2))  # 2个元素的元组:  (3, 4)
# 返回二维数组的行数:3
print(arr2.shape[0])
print(arr2.shape[1])

运行结果:

 构造复杂数组

import numpy as npa = np.arange(5)                  # a= [0 1 2 3 4]
b = np.tile(a, 2)                    # 对变量a重复2次:b = [0 1 2 3 4 0 1 2 3 4]
c = np.tile(a, (3, 2))               # 对a 行重复3次,列重复2次# 重复元素: repeat,如:
d = a.repeat(2)  # 对变量a里的元素依次重复2次: d= [0 0 1 1 2 2 3 3 4 4]print(b)
print(c)
print(d)

运行结果:

 生成随机数

import numpy as npnp.random.seed(0)
A = np.random.rand(4)               # 生成区间[0,1)上的均匀分布的4个随机浮点数的一维数组
print(A)  # [0.5488135  0.71518937 0.60276338 0.54488318]
a = [i for i in range(10)]  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
b = [np.random.choice(a) for i in range(6)]  # 每次从 a 中随机返回一个元素,共迭代6次
# [3, 0, 3, 5, 0, 2]
print(b)# 打乱数组顺序
x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
y = np.random.permutation(x)      # x的数据不动,把随机打乱后的数据返给y
np.random.shuffle(x)                                     # 直接随机打乱数组x的数据
print(x)

运行结果:

 例题10-2:绘制:随机生成10000数据,服从均值为0,方差为1的正态分布的直方图(间隔个数:50)

import numpy as np
import matplotlib.pyplot as pltnp.random.seed(0)
data = np.random.normal(0, 1, 10000)
print(min(data), max(data))
n, bins, patches = plt.hist(data, 50, facecolor='red', edgecolor='white')
plt.grid(True)
plt.show()

运行结果:

 通过索引访问数组

import numpy as nparr = np.arange(10)  # arr = [0 1 2 3 4 5 6 7 8 9]
print(arr[5])  # 首个索引号从0开始,输出:5
print(arr[3:5])                      # 索引号从第3个,到第4个,输出:[3  4]
print(arr[:5])  # 索引号从第0个,到第4个,输出:[0 1 2 3 4]
print(arr[-1])                            # -1表示数组最后一个元素:9
print(arr[6:-1:2])  # 索引号从第6个,到最后一个,2为步长,表示每隔一个元素:[6 8]
print(arr[5:1:-2])  # 步长为负数时,开始索引号必须大于结束索引号,输出:[5 3]arr = np.array([[1, 2, 3, 4, 5], [4, 5, 6, 7, 8], [7, 8, 9, 10, 11]])
print(arr[2, 3])            # 索引号第2行第3列的元素,输出:10print(arr[0, 3:5])          # 索引号第0行中第3和4列的元素:[4 5]print(arr[1:, 2:])  # 索引号第1行、第2列后面所有元素
print(arr[1:, 2:])  # 索引号第1行、第2列后面所有元素
print(arr[2:])                         # 索引号第2行所有列:[  7  8  9 10 11 ]
print(arr[:, 2])                        # 索引号第2列所有行:[ 3  6  9 ]

运行结果:

 数组的迭代

import numpy as npa = np.arange(2, 8, 2)
for i in a:print(i, end=',')  # 2, 4, 6
for i in enumerate(a):print(i, i[0], i[1])

运行结果:

 数组间的四则运算

import numpy as npx = np.array([1, 2, 3])
y = np.array([4, 5, 6])
z = np.array("1,2,3")
# 数组元素对应相加,结果为:[5 7 9]
print(x + y)
# 数组元素对应相减,结果为:[-3 -3 -3]
print(x - y)
# 数组元素相乘,结果为:[4 10 18]
print(x * y)
# 数组元素对应相除,结果为:[0.25  0.4  0.5 ]
print(x / y)
# 数组元素对应幂运算,结果为:[ 1  32  729]
print(x ** y)
# 注意:
# print(z.dtype)
# print(z.ndim)  # z 的数据类型:<U5 ,z 的维数:0
# x + z  # 报错 ,数据形状不一样,不能进行运算

运行结果:

 一个数与数组的四则运算

import numpy as np# np.shape(a):(3,4 )
a = np.array([[1, 2, 3, 4], [4, 5, 6, 7], [7, 8, 9, 10]])
b = 2 * a
c = b.reshape(4, 3)  # 将数组b的形状改为(4,3),b不动
print(a)
print(b)
print(c)

运行结果:

 比较运算

import numpy as npx = np.array([1, 3, 5])
y = np.array([2, 3, 4])
print(x < y)         	    	         # 输出:[ True  False  False]
print(x >= y)        		           	 # 输出:[False  True  True]
print(x == y)       			         # 输出:[False  True  False]
print(x != y)         			         # 输出:[ True  False  True]

运行结果:

 逻辑运算

import numpy as npx = np.array([1, 3, 5])
y = np.array([2, 3, 4])
print(np.all(x == y))    			# 输出:False
print(np.all(x != y))    		    # 输出:False
print(np.any(x != y))    	        # 输出:True

运行结果:

 数组的转置

import numpy as np# np.shape(a) = (4,) 表示一维数组
a = np.array([1, 2, 3, 4])
b = np.array([[1, 2, 3, 4], [4, 5, 6, 7], [7, 8, 9, 10]])    # (3,4) 表示二维数组
# 一维数组 a 的转置:np.shape(c) = (4,)
c = np.transpose(a)
# 二维数组 b 的转置:np.shape(d) = (4,3)
d = np.transpose(b)
print(c)
print(d)

运行结果:

 数组的点积运算

import numpy as npa = np.array([1, 2, 3, 4])  # (4,) 表示一维数组
b = np.array([[1, 2, 3, 4], [4, 5, 6, 7], [7, 8, 9, 10]])    # (3,4) 表示二维数组
e = np.dot(b, a)  # (3, 4) 与 (4,) 点积运算
print(np.shape(e), e)  # (3,) [30 60 90]
#e = np.dot(a, b)  # Error: shapes (4,) and (3,4)

运行结果:

 NumPy矩阵运算

import numpy as npmatr1 = np.matrix("1 2 3;0 5 6;0 0 9")
matr2 = matr1 * 3                               # 矩阵数乘
matr3 = matr1 + matr2                           # 矩阵加法
matr4 = matr1 - matr2                           # 矩阵减法
matr5 = matr1 * matr2                           # 矩阵相乘(乘法)
matrB = np.multiply(matr1, matr2)       # 矩阵对应元素相乘
matr6 = matr1.T                                     # 矩阵的转置
matr8 = matr1.H                                     # 矩阵的共轭转置
matr9 = matr1.I                                     # 矩阵的逆

运行结果:

 例题10-4:数组、矩阵之间的线性代数运算

import numpy as npx = np.array([[1, 2, 3], [0, 1, -1], [1, 0, 0]])  # x 为二维数组:形状为 (3,3)
print(np.linalg.det(x))                                # x 对应矩阵的行列式,输出:-5
y = np.linalg.inv(x)               # x 对应矩阵的逆(AB=BA=E),此时的 y 为二维数组:形状为 (3,3)
a = np.dot(x, y)                      # 数组 x 与 y 做点积运算,等价于两个矩阵相乘
b = np.mat(x)*np.mat(y)  # 将数组 x 与 y 转为矩阵,再做矩阵乘法,等价于 np.dot(x,y)
c = x * y                              # 数组x与y相乘,即两个数组对应元素相乘,注意:不同于np.dot(x,y)
print(a == b)                          # 完全相同,全为True
d = np.linalg.eigvals(x)       # x 对应矩阵的特征值,返回的 d 为列表
# [-1.51154714+0.j  1.75577357+0.47447678j  1.75577357-0.47447678j ]
print(d)
e = np.linalg.eig(x)  # x 对应矩阵的特征值及特征向量,返回的 e 为元组
print(e[0], e[1])  # e[0]为 x 的特征值,e[1]为 x 的特征向量

运行结果:

 保存一个数组

import numpy as nparr = np.array([[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6]])
# np.save()只能保存一个数组
print(arr)
np.save("save_arr", arr)                          # 保存时,默认后缀名为npy
load_arr = np.load("save_arr.npy")       # 打开时,必须有后缀名 (若没写路径,默认为当前路径下)
print(load_arr)                                          # 返回的是 'numpy.ndarray'

运行结果:

 保存多个数组

import numpy as np# 将0-19共20个数,生成一个三维数组:(2,2,5)
x = np.array(range(20)).reshape((2, 2, 5))
y = np.array(range(10, 34)).reshape(2, 3, 4)
# 将10-33共24个数,生成一个三维数组:(2,3,4)
print('x:\n', x)
print('y:\n', y)
filename = 'c:\\qun1\\test\\test.npz'
# 写文件,如果不指定key,那么默认key为'arr_0'、'arr_1',一直排下去。
np.savez(filename, x, key_y=y)          # 数组x没有指定键名,访问时用arr_0,数组y指定了键名
c = np.load(filename)                   # 读文件 : 多个数组,通过键名访问
print('keys of NpzFile c:\n', c.keys())
print("c['arr_0']:\n", c['arr_0'])
print("c['key_y']:\n", c['key_y'])

运行结果:

 例题10-5:编写程序,读取数据,保存在文件.csv中。

# 编写程序,将这3个列数据,及对应的年份读取出来,保存在文件“历年总人口、新生人口和死亡人口.csv”中。
import numpy as np
import xlrdwb = xlrd.open_workbook("历年总人口.xls")
sheet = wb.sheet_by_index(0)                      # 通过索引号0获取整个sheet数据
col_0 = sheet.col_values(0)                           # 第0列数据,返回一个列表:年度
col_1 = sheet.col_values(1)                           # 第1列数据,返回一个列表:总人口
# 年份:从第1个元素开始,到最后一个元素
year = col_0[1:]
# 总人口:从第1个元素开始,到最后一个元素
total = col_1[1:]
year = [int(c) for c in year]                           # 用列表推导式,把每个元素转为整数
total = [int(c) for c in total]                         # 用列表推导式,把每个元素转为整数wb = xlrd.open_workbook("历年新生人口和死亡人口.xls")
sheet = wb.sheet_by_index(0)                  # 通过索引号0获取整个sheet数据
col_1 = sheet.col_values(1)                   # 通过列索引号1获取列内容:出生人口
col_2 = sheet.col_values(2)                   # 通过列索引号2获取列内容:死亡人口
add = col_1[1:]                               # 出生人口:从第1个元素开始,到最后一个元素
die = col_2[1:]                               # 死亡人口:从第1个元素开始,到最后一个元素
add = [int(c[0:-1]) for c in add]             # 用列表推导式,把最后一个‘万’字去掉
die = [int(c[0:-1]) for c in die]             # 用列表推导式,把最后一个‘万’字去掉
y = np.array(add)-np.array(die)               # 将两个列表变成数组相减,生成每年净增人口
m = len(year)arr = np.array(year).reshape(m, 1)            # 将年份的列表转为数组,形状调整为:(m,1)
arr = np.insert(arr, 1, values=total, axis=1)           # 在第1列后面插入1列
arr = np.insert(arr, 2, values=add, axis=1)             # 在第2列后面插入1列
arr = np.insert(arr, 3, values=die, axis=1)             # 在第3列后面插入1列
arr = np.insert(arr, 4, values=y, axis=1)               # 在第4列后面插入1列file = 'c:\\qun1\\test\\大陆历年总人口、新生人口和死亡人口.csv'
np.savetxt(file, arr, fmt='%i', delimiter=',',comments='', header='年份,总人口,出生人口,死亡人口,净增人口')
x = np.loadtxt(file, dtype=np.int, delimiter=',', skiprows=1)
print(x)

运行结果:

 例题10-6:读.txt文件

import numpy as npf = np.loadtxt('testSet.txt')                              # 打开文本文件
print("返回的二维数组f的形状:", np.shape(f))
print(f)

运行结果:


http://chatgpt.dhexx.cn/article/LamnN8rn.shtml

相关文章

python3.8安装pysal库

python3.8 安装 pysal 库 我最后是在虚拟环境中测试成功的&#xff0c;在原来的环境中测试还是有问题&#xff0c;但是装这个库只是为了一个assignment&#xff0c;踩完坑来总结一下&#xff0c;先用上再说。 1. 创建虚拟环境 正常环境无论是conda install 还是 conda-forge …

YYlabelCopy

YYlabelCopy 前言 最近公司刷题项目重构,之前刷题是采用富文本渲染,性能极差,业界大神ibireme的YYKit想必大家都知道,YYText的好用之处我就不再赘述.一开始我们是把UIlabel换成YYTextView,为什么不直接换成YYlabel,YYlabel支持异步绘制,因为我们是做公考项目的,试题都要支持复…

Kong Customize Python Plugin

Kong Customize Python Plugin 前情提要&#xff1a;由于公司业务需求&#xff0c;需要针对 Kong 自定义插件&#xff0c;而 Kong 的插件主要是 Lua 语言&#xff0c;公司的技术栈是 Python&#xff0c;所以升级了 Kong 版本到 3.1。Kong3.1支持使用 Python 语言的插件&#xf…

ubuntu中pip install cython_bbox报错

pip install cython_bbox报错 问题记录 pip install cython_bbox报错如下 Collecting cython_bboxUsing cached cython_bbox-0.1.3.tar.gz (41 kB)Preparing metadata (setup.py) ... errorerror: subprocess-exited-with-error python setup.py egg_info did not run succe…

Cython-bbox pip 安装报错

安装步骤 下载Cython_bbox源码&#xff0c;点击Download files下载。解压文件。打开setup.py&#xff0c;找到第31行&#xff0c;把其中extra_compile_args[’-Wno-cpp’]的替换为extra_compile_args{‘gcc’: [‘/Qstdc99’]}。保存改动&#xff0c;返回cython_bbox-0.1.3文件…

pysot-toolkit测试及对比

文章目录 前言1、环境搭建2、文件配置3、测试及对比3.1 单跟踪器测试3.2 多跟踪器对比 前言 pysot-toolkit是一款评估单目标跟踪性能的工具&#xff0c;可以计算OPE(One Pass Evaluation)下的Success和Precision、以及VOT(Visual Object Tracking)的性能指标Accuracy、Robustne…

Python加解密库——pycrypto(pycryptodome)

文章目录 简介安装方法一&#xff1a;Visual Studio方法二&#xff1a;pycryptodome&#xff08;推荐&#xff09; 初试公钥加解密对称加密非对称加密 数字签名哈希函数安全通信加密IO封装遇到的坑参考文献 简介 pycrypto 实现了哈希函数&#xff08;如 SHA256&#xff09;和加…

自制Python小工具(1)——Gadgets 0.1

文章目录 1. 前言2. Gadgets 0.1介绍2.1 使用过程概述 3. Gadgets 0.1功能实现3.1 创建文件3.2 功能编程3.2.1 安装3.2.2 导库3.2.3 定义函数并实现功能 3.3 主程序3.3.1 向用户问好并提供指示3.3.2 填入功能 3.4 装饰加载 4. 源码展示4.1 extract_music.py4.2 loading.py4.3 G…

Windows下安装pycocotools(本人亲测,可以解决)

Windows下安装pycocotools 1. 下载pycocotools的源码2. 安装python对应的VC3. 进行pycocotools的编译4. 测试安装是否成功 参考博客&#xff1a;原博客 由于windows下是不能直接使用conda install 或者pip install pycocotools&#xff0c;唉&#xff0c;不像linux系统&#x…

学习 PySOT(2)(PySOT-toolkit、对比、画图)

文章目录 前言一、pysot-toolkit准备工作1.所需环境要求2.文件配置3.运行配置&#xff08;对比算法&#xff09; 二、安装latex软件(win10系统)1.安装MiKTeX2.安装TexMaker3.配置TexMaker4.配置MiKTeX 三、运行eval.py画图1. 修改eval.py参数&#xff0c;运行2. 常见问题解决 前…

redis-exporter监控

文章目录 启动redis-export服务启动prometheus服务启动granfana服务测试报警 使用redis-exporter监控redis服务&#xff0c;并且使用prometheus收集数据&#xff0c;使用grafana展示数据。 监控报警利用alertmanager插件&#xff0c;报警信息发送钉钉消息。所使用的安装包可以 …

Zabbix实现对Redis的监控

Zabbix实现对Redis的监控 环境准备 五台机器&#xff1a; zabbix_agent 5.0 被动模式&#xff08;已安装&#xff09; Zabbix_java_gateway 5.0 &#xff08;已安装&#xff09; 10.0.0.7 MariaDB-10.4.22&#xff08;已安装&#xff09; zabbix_server 5.0&#xff08;已安…

zabbix配置redis监控

1 redis监控需要用到zabbix_agent2的版本&#xff0c;该版本涵盖了zabbix_agent1的全部功能。安装zabbix_agent2 yum install zabbix-agent2-5.0.13-1.el7.x86_64 -y 2 配置zabbix_agent2.conf的脚本&#xff0c;将redis的相关信息配置。vi /etc/zabbix/zabbix_agent2.conf …

【中间件】Redis监控以及指标

一、监控指标 1.1、性能指标&#xff1a;Performance Name Description latency Redis响应一个请求的时间 instantaneous_ops_per_sec 平均每秒处理请求总数 hi rate(calculated) 缓存命中率&#xff08;计算出来的 1.2、内存指标: Memory Name Description used_m…

Redis监控和预警

1.摘要 本人从事Java Web开发&#xff0c;在项目开发中会用到很多中间件&#xff0c;本文主要介绍Redis监控的一点心得和使用&#xff0c;公司DBA也有相应的监控&#xff0c;但是我们的业务比较重要&#xff0c;想做一个备份监控&#xff0c;对Redis监控需要做监控和预警&#…

如何完善Redis监控告警?

本文字数&#xff1a;3940字 预计阅读时间&#xff1a;20分钟 一、背景二、监控指标分类三、监控指标说明四、总结 一、背景 Redis监控告警实践是基于开发CacheCloud云平台过程中不断实践和总结出来&#xff0c;随着Redis实例规模不断变大&#xff0c;会遇到各种各样的问题&…

redis集群监控

通过Prometheus监控redis集群 一、promethus安装 下载地址&#xff1a; https://github.com/prometheus/prometheus/releases 1、下载 wget https://github.com/prometheus/prometheus/releases/download/v2.32.1/prometheus-2.32.1.linux-amd64.tar.gz 2、安装、配置 ta…

Linux安装Redis监控工具RedisInsight

文章目录 1.简介2.安装RedisInsight2.1下载RedisInsight2.2配置RedisInsight2.3运行RedisInsight 3.使用RedisInsight3.1添加Redis3.1.1添加单机Redis 3.2自动发现Redis3.3以编程方式添加Redis3.4性能指标3.5集群管理3.6命令行3.7内存分析3.7.1在实例上运行内存分析3.7.2内存概…

RedisInsight:Redis监控工具部署(linux)

RedisInsight 部署流程 简介一、下载二、安装1.准备工作2.配置及介绍3.运行4.访问 总结 简介 RedisInsight提供以下功能&#xff1a; 易于使用基于浏览器的界面来搜索键、查看和编辑数据唯一支持Redis集群的GUI工具支持基于SSL/TLS的连接运行内存分析 一、下载 下载地址: R…

redis监控工具

redis-monitor 项目github地址&#xff1a;https://github.com/NetEaseGame/redis-monitor &#xff08;看作者名称&#xff0c;应该是华科的&#xff09; # 安装 pip install redis-monitor#初始化redis-monitor init#启动 nohup redis-monitor start > redis-monitor.l…