Numpy简易入门

1.1 认识Numpy数组对象

1.1.1 导入NumPy工具包
#导包并起别名为np
import numpy as np
1.1.2 创建一个三行五列的数组
data = np.arange(15).reshap(3, 5)

打印结果:data

1.1.3 查询data类型
print(type(data))

打印结果:

<class 'numpy.ndarray'>
ndarray是一个N维数组类型的对象
1.1.4 查询数组维度的个数
print(data.ndim)

输出结果:

2
1.1.5 查询数组的形状
print(data.shape)

输出结果

(3, 5)
1.1.6 查询数组元素的个数
print(data.size)

输出结果

15
1.1.7 查询数组中元素的类型
print(data.dtype)

输出结果

int32

1.2 创建Numpy数组

1.2.1 创建一个一维数组并赋值
import numpy as np
data1 = np.array([1, 2, 3])
print(data1)

输出结果

[1 2 3]
1.2.2 创建一个二维数组并赋值
data2 = np.array([[1, 5, 1], [2, 4, 7]])

打印结果

[[1 5 1][2 4 7]]
1.2.3 创建一个全零数组
#默认为浮点型
data3 = np.zeros((3, 4))
#改为整型
data3 = np.zeros((3, 4), int)

输出结果

//默认
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
//整型
[[0 0 0 0]
[0 0 0 0]
[0 0 0 0]]
1.2.4 创建一个全1数组
data4 = np.ones((3, 4))

输出结果

[[1. 1. 1. 1.][1. 1. 1. 1.][1. 1. 1. 1.]]
1.2.5 创建一个全空数组
#其实是趋于0的数
data5 = np.empty((3, 4))

输出结果

[[1.06810268e-306 1.42419938e-306]
[7.56603881e-307 7.56600486e-307]
[1.02360867e-306 1.29061889e-306]
[6.23040373e-307 1.42419530e-306]
[1.60219035e-306 3.11529184e-307]]
1.2.6 以等差数列创建一个数组
#从1开始到20为止,步长为5
data6 = np.arange(1, 20, 5)

输出结果

[ 1  6 11 16]
1.2.7 创建一个浮点类型的数组
data7 = np.array([1, 2, 3, 0.1], float)

输出结果

[1.  2.  3.  0.1]

其他的也可以指定类型,比如:

data8 = np.ones((2, 3), dtype='float64')
#也可以这样写
#data8 = np.ones((2, 3), float)

输出结果

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

1.3 ndarry对象的数据类型

1.3.1 查看数据类型
data1 = np.array([[1, 2, 3], [4, 5, 6]])
print(data1.dtype.name)

输出结果

int32
1.3.2 转换数据类型
data2 = data1.astype(np.float64)
print(data2.dtype)data3 = np.array([1.2, 1.3, 1.4, 3.3])
data4 = data3.astype(np.int64)
print(data4.dtype)data5 = np.array(["1", "2", "3", '4'])
data6 = data5.astype(np.int64)
print(data6)
print(data6.dtype)

输出结果

float64
int64
[1 2 3 4]
int64

1.4 数组运算

1.4.1 向量化运算
import numpy as npdata1 = np.array([[1, 2, 3], [4, 5, 6]])
data2 = np.array([[-1, -4, 1], [7, 5, 2]])
#将第一个数组中的元素与第二个数组中对应的元素进行加减乘除
print(data1 + data2)
print(data1 - data2)
print(data1 * data2) 
print(data1 / data2)

输出结果

[[ 0 -2  4][11 10  8]][[ 2  6  2][-3  0  4]][[-1 -8  3][28 25 12]][[-1.         -0.5         3.        ][ 0.57142857  1.          3.        ]]
1.4.2 数组广播

数组间的基础运算是一对一,但是当两者不一样时。就会自动触发广播机制,
但有些无法扩展的会报错,比如:(行数,列数), (3, 2) + (1, 3)报错

data3 = np.array([[1], [2], [3], [4]])
data4 = np.array([1, 2, 3])
print(data3 + data4)

输出结果

//相当于
1 1 1      1 2 3
2 2 2  +   1 2 3 
3 3 3      1 2 3
4 4 4      1 2 3[[2 3 4][3 4 5][4 5 6][5 6 7]]
1.4.3 数组与标量间的运算

将数组中每个元素与标量计算,返回计算后的数组

data8 = np.array([[2, 8, 4], [3, 5, 7], [2, 4, 9]])
x = 7
print(data8 + x)
print(x - data8)
print(data8 * x)
print(x / data8)

输出结果

[[ 9 15 11][10 12 14][ 9 11 16]]
[[ 5 -1  3][ 4  2  0][ 5  3 -2]]
[[14 56 28][21 35 49][14 28 63]]
[[3.5        0.875      1.75      ][2.33333333 1.4        1.        ][3.5        1.75       0.77777778]]

1.5 ndarray的索引和切片

1.5.1 整数索引和切片的基本使用
import numpy as npdata = np.arange(36).reshape(6, 6)
print(data)
# 打印第五行
print(data[5])
# 打印第3 ~ 5-1 行
print(data[3:5])
# 打印第0行,从第3到4的元素
print(data[0, 3:5])
# 打印第1行,从0到1的元素
print(data[1, :2])
# 打印第0行,从1到6-1步长为2
print(data[0, 1:6:2])
# 打印第2行第3个元素
print(data[2, 3])
# 打印前两行
print(data[:2])
# 打印第1到3行,第1到3列
print(data[1:3, 1:3])

输出结果

[[ 0  1  2  3  4  5][ 6  7  8  9 10 11][12 13 14 15 16 17][18 19 20 21 22 23][24 25 26 27 28 29][30 31 32 33 34 35]][30 31 32 33 34 35]
[[18 19 20 21 22 23][24 25 26 27 28 29]][3 4][1 3 5]15
[[ 0  1  2  3  4  5][ 6  7  8  9 10 11]][[ 7  8][13 14]][6 7]
1.5.2 花式(数组)索引的基本使用
arr = np.empty((4, 4))
for i in range(4):arr[i] = np.arange(i, i+4)
print(arr)
# 打印第0和2行
print(arr[[0, 2]])
# 获取(1, 0)和(3, 2)
print(arr[[1, 3], [0, 2]])

输出结果

[[0. 1. 2. 3.][1. 2. 3. 4.][2. 3. 4. 5.][3. 4. 5. 6.]][[0. 1. 2. 3.][2. 3. 4. 5.]][1. 5.]
1.5.3 布尔型
studentName = np.array(["Tom", "Amiya", "Theresa"])
studentScore = np.array([[79, 88, 89], [87, 65, 95], [74, 85, 61]])
print(studentName == "Amiya")
print(studentScore[studentName == "Amiya"])
print(studentScore[studentName == 'Theresa', :1])

输出结果

[False  True False]
[[87 65 95]]
[[74]]

1.6 数组的转置和轴对称

arr = np.arange(12).reshape(3, 4)
print(arr)
# 使用T属性对arr转置
print(arr.T)
# 转置,0为x,1为y, 设置为1,0,代表xy互换
print(arr.transpose(1, 0))arr1 = np.arange(12).reshape(2, 2, 3)
print(arr1)
# 将xy互换
print(arr1.transpose(1, 0, 2))
# swapaxes是将n维数组中两个维度进行调换,xy互换
print(arr1.swapaxes(1, 0))

输出结果

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

1.7 numpy通用数组

import numpy as nparr1 = np.array([4, 8, 4, 2])
# 开方
print(np.sqrt(arr1))
# 取绝对值
arr2 = np.array([-1, 2, -10, -2])
print(np.abs(arr2))
# 求平方
print(np.square(arr2))
# 计算arr1和arr2的和
print(np.add(arr1, arr2))
# 计算两个数组的乘积
print(np.multiply(arr1, arr2))
# 多个数组取最大值
print(np.maximum(arr1, arr2))
# 执行元素级的比较操作
print(np.greater(arr1, arr2))
print(np.less(arr1, arr2))

输出结果

[2.         2.82842712 2.         1.41421356]
[ 1  2 10  2]
[  1   4 100   4]
[ 3 10 -6  0]
[ -4  16 -40  -4]
[4 8 4 2]
[ True  True  True  True]
[False False False False]

1.8 利用numpy数组进行数据处理

1.8.1 将条件逻辑转为数组运算
# true选第一个,false选第二个
arr1 = np.array([1, 2, 5])
arr2 = np.array([4, 7, 1])
con = np.array([True, False, False])
print(np.where(con, arr1, arr2))

输出结果

[1 7 1]
1.8.2 数组统计运算
arr = np.array([1, 2, -1, 7])
# 求和
print(arr.sum())
# 求平均值
print(arr.mean())
# 求最小值
print(arr.min())
# 求最大值
print(arr.max())
# 求最小值的索引
print(arr.argmin())
# 求最大值的索引
print(arr.argmax())
# 计算元素的累计和
print(arr.cumsum())
# 计算元素的累计积
print(arr.cumprod())
# np.diff()数组中后一个数减前一个数
# np.diff(a, n=1, axis=-1, prepend=<no value>, append=<no value>)[source]
# a: 数组, n:计算次数,axis: 0竖直减、1横着减
print(np.diff(arr))a = np.array([-0.7, 1.2, -1.2, 0.5])
# 向下取整
print(np.floor(a))
#向上取整
print(np.ceil(a))
# 实现大于0取原值,小于0取零
print(np.where(a>0, a, 0))

输出结果

9
2.25
-1
7
2
3
[1 3 2 9]
[  1   2  -2 -14]
[ 1 -3  8]
[-1.  1. -2.  0.]
[-0.  2. -1.  1.]
[0.  1.2 0.  0.5]
数组排序
arr = np.array([[2, 1, 8], [8, 4, 1], [3, 9, 4]])
# 按行排序排序
arr.sort()
print(arr)

输出结果

[[1 2 8][1 4 8][3 4 9]]
arr = np.array([[2, 1, 8], [8, 4, 1], [3, 9, 4]])
# 按列排序
arr.sort(0)
print(arr)

输出结果

[[2 1 1][3 4 4][8 9 8]]
1.8.4 检索数组元素
# 检查是否有大于0的数
print(np.any(arr > 0))
# 检查是否所有元素都大于0
print(np.all(arr > 0))
1.8.5 唯一化及其他集合逻辑
a = np.array([1, 2, 4, 5, 1, 2, 4])
# 去重
print(np.unique(a))
# 输出序列a中元素与序列[1,5]是否相同
print(np.in1d(a, [1, 5]))

输出结果

[1 2 4 5]
[ True False False  True  True False False]

1.9 线性代数模块

# 矩阵乘法
arr1 = np.array([[1, 2, 3], [1, 2, 3]])
arr2 = np.array([[1, 2], [2, 2], [4, 1]])
print(arr1.dot(arr2))
print(np.dot(arr1, arr2))

输出结果

[[17  9][17  9]]
[[17  9][17  9]]

1.10 随机数模块

# 生成3x3的随机矩阵,值从0到1
print(np.random.rand(3, 3))
# 生成三维随机矩阵
print(np.random.rand(3, 3, 2))
# 设置种子
np.random.seed(0)
# 产生随机数
print(np.random.rand(5))
np.random.seed()
print(np.random.rand(5))

输出结果

[[0.91915309 0.3273642  0.48099848][0.30841312 0.5656747  0.98334858][0.29554889 0.18315713 0.47518993]][[[0.75420241 0.30841421][0.68911038 0.05800794][0.02904897 0.37479255]][[0.37839904 0.3322166 ][0.22317202 0.18784184][0.47441706 0.0337881 ]][[0.48213152 0.71993534][0.52116272 0.92980627][0.30824145 0.19018865]]][0.5488135  0.71518937 0.60276338 0.54488318 0.4236548 ][0.73906657 0.14488605 0.63462347 0.46018479 0.98655736]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/19728.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【设计模式】【行为型模式】访问者模式(Visitor)

&#x1f44b;hi&#xff0c;我不是一名外包公司的员工&#xff0c;也不会偷吃茶水间的零食&#xff0c;我的梦想是能写高端CRUD &#x1f525; 2025本人正在沉淀中… 博客更新速度 &#x1f44d; 欢迎点赞、收藏、关注&#xff0c;跟上我的更新节奏 &#x1f3b5; 当你的天空突…

建筑兔零基础自学python记录22|实战人脸识别项目——视频人脸识别(下)11

这次我们继续解读代码&#xff0c;我们主要来看下面两个部分&#xff1b; 至于人脸识别成功的要点我们在最后总结~ 具体代码学习&#xff1a; #定义人脸名称 def name():#预学习照片存放位置path M:/python/workspace/PythonProject/face/imagePaths[os.path.join(path,f) f…

源代码防泄密沙箱是啥意思?

SDC沙盒通过多种技术手段实现环境隔离&#xff0c;从而有效防止数据泄露。以下是其具体的隔离机制&#xff1a; 1. 创建隔离的加密沙盒 SDC沙盒在员工电脑上虚拟出一个对外隔绝的加密沙盒。这个沙盒会主动与服务器进行认证对接&#xff0c;形成服务器-客户端沙盒这样一个涉密…

【复现DeepSeek-R1之Open R1实战】系列4:SFT和GRPO源码逐行深度解析(上)(3万字长文,从零开始到入门,包含详细的拓展基础知识)

目录 1 前言1.1 Open R1项目简介1.2 主要步骤1.3 原理图 2 基础知识2.1 Vocabulary和Tokenizer2.1.1 vocab.json, tokenizer.json, tokenizer_config.json2.1.2 什么是tokenizer2.1.3 在哪一步将tokenizer转成embedding2.1.4 tokenizer的代码实现 2.2 SFT和GRPO2.2.1 SFT2.2.2 …

课题推荐:高空长航无人机多源信息高精度融合导航技术研究

高空长航无人机多源信息高精度融合导航技术的研究&#xff0c;具有重要的理论意义与应用价值。通过深入研究多源信息融合技术&#xff0c;可以有效提升无人机在高空复杂环境下的导航能力&#xff0c;为无人机的广泛应用提供强有力的技术支持。希望该课题能够得到重视和支持&…

python_excel批量插入图片

提取excel的指定列的值的后4位&#xff08;数值&#xff09;&#xff0c;在其它列名的单元格中&#xff0c;批量嵌入与该数值匹配的图片&#xff08;未实现居中&#xff09;&#xff0c;每间隔4行处理一次&#xff08;合并过单元格&#xff09;。 import pandas as pd from ope…

DeepSeek 助力 Vue 开发:打造丝滑的颜色选择器(Color Picker)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

Jenkinsdebug:遇到ERROR: unable to select packages:怎么处理

报错信息&#xff1a; 报错信息解释&#xff1a; musl-1.2.5-r0 和 musl-dev-1.2.5-r1: 这里说明 musl-dev 需要一个特定版本的 musl&#xff0c;即 musl1.2.5-r1&#xff0c;但是当前版本的 musl&#xff08;1.2.5-r0&#xff09;并不满足这个条件。版本冲突: 当尝试安装新…

并查集基础+优化(下标从0开始)

#include<iostream> #include<algorithm> #include<vector> using namespace std; const int N 1e510; int n,m; int fa[N]; void set(int u,int v) {fa[v] u; } int find(int arr[],int i) {while(arr[i] ! -1){i arr[i]; } return i;//返回的是这个节点…

STM32创建静态库lib

创建静态库lib 1. 新建工程1.1 创建工程文件夹1.2 编写用户相关代码1.2.1 stm32f4xx_it.h1.2.2 stm32f4xx_it.c1.2.3 标准库配置&#xff1a;stm32f4xx_conf.h1.2.4 HAL库的配置&#xff1a;stm32f4xx_hal_conf.h1.2.5 LL库配置&#xff1a;stm32f4xx_ll_conf.h 1.3 移植通用文…

CV -- 基于GPU版显卡CUDA环境+Pycharm YOLOv8 检测

目录 下载 CUDA 下载 cuDNN 下载 anaconda 安装 PyTorch pycharm 搭配 yolo 环境并运行 阅读本文须知&#xff0c;需要电脑中有 Nvidia 显卡 下载 CUDA 打开 cmd &#xff0c;输入 nvidia-smi &#xff0c;查看电脑支持 CUDA 版本&#xff1a; 我这里是12.0&#xff0c;进入…

MATLAB图像处理:图像分割方法

图像分割将图像划分为具有特定意义的子区域&#xff0c;是目标检测、医学影像分析、自动驾驶等领域的核心预处理步骤。本文讲解阈值分割、边缘检测、区域生长、聚类分割、基于图的方法等经典与前沿技术&#xff0c;提供MATLAB代码实现。 目录 1. 图像分割基础 2. 经典分割方…

海康摄像头IPV6模式,手动,自动,路由公告

海康摄像头DS-2DC7220IW-A 网络设置中的IPv6配置选项。IPv6是互联网协议&#xff08;IP&#xff09;的第六版&#xff0c;用于替代IPv4&#xff0c;提供更多的IP地址和改进的网络功能。图片中的选项允许用户选择如何配置设备的IPv6网络连接&#xff1a; 手动&#xff1a;用户可…

NewMap10.3土地勘测定界自动化系统

“NewMap报件通”适用于建设项目用地土地勘测定界工作&#xff0c;其设计理念是以最大化提高作业效率与最简化作业员操作为原则&#xff0c;后台采用数据库管理技术&#xff0c;以“GIS概念”实现了图形数据与属性数据的双向联动&#xff0c;利用该系统可以方便快捷地绘制数字化…

栈(典型算法思想)—— OJ例题算法解析思路

目录 一、1047. 删除字符串中的所有相邻重复项 - 力扣&#xff08;LeetCode&#xff09; 算法代码&#xff1a; 1. 初始化结果字符串 2. 遍历输入字符串 3. 检查和处理字符 4. 返回结果 总结 二、844. 比较含退格的字符串 - 力扣&#xff08;LeetCode&#xff09; 算…

Qt中基于开源库QRencode生成二维码(附工程源码链接)

目录 1.QRencode简介 2.编译qrencode 3.在Qt中直接使用QRencode源码 3.1.添加源码 3.2.用字符串生成二维码 3.3.用二进制数据生成二维码 3.4.界面设计 3.5.效果展示 4.注意事项 5.源码下载 1.QRencode简介 QRencode是一个开源的库&#xff0c;专门用于生成二维码&…

字符串哈希动态规划_6

一.字符串哈希 字符串哈希概述 字符串哈希是一种将字符串映射到一个数值的技术&#xff0c;常用于处理字符串相关的算法问题&#xff0c;尤其在处理字符串匹配、子串查找等问题时非常高效。它的核心思想是利用一个哈希函数将字符串映射成一个整数&#xff0c;并根据该整数来判…

Kubernetes控制平面组件:Kubernetes如何使用etcd

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…

Mybatis后端数据库查询多对多查询解决方案

问题场景&#xff1a; 我开发的是一个论文选择系统。 后端用一个论文表paper来存储论文信息。 论文信息中&#xff0c;包含前置课程&#xff0c;也就是你需要修过这些课程才能选择这个论文。 而一个论文对应的课程有很多个。 这样就造成了一个数据库存储的问题。一个paper…

BGP配置华为——RR反射器配置

实验拓扑 与之前实验同理将loop0作为routerID使用&#xff0c;且R1和R2上用loop1接口用于模拟用户其他网段 实验要求 1&#xff0c;在AS100内运行OSPF协议 2.配置路由反射器&#xff0c;使得从R1进入的数据能够反射到全局网络 3.在R1和R2上分别宣告自己的loop1口网段用于观…