前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >(四)Python: NumPy中的ndarry

(四)Python: NumPy中的ndarry

作者头像
小点点
发布于 2022-12-12 05:37:02
发布于 2022-12-12 05:37:02
38400
代码可运行
举报
文章被收录于专栏:小点点小点点
运行总次数:0
代码可运行

目录

基本概念

基本属性

创建

使用 

方法

操作

运算 

基本运算

方法运算

线性代数运算

ufunc函数


基本概念

维度(dimensions)称为轴 (axes),轴的个数称为秩(rank)。

基本属性

  • ndarray.ndim(秩)
  • ndarray.shape(维度) 
  • ndarray.size(元素总个数) 
  • ndarray.dtype(元素类型) 
  • ndarray.itemsize(元素字节大小)

创建

ndarray的创建可以使用多种创建函数,如下所示,只展示几种常见的创建方法,代码如下所示:

arange

array

copy

empty

empty_like

eye

fromfile

fromfunction

identity

linspace

logspace

mgrid

ogrid

ones

random

ones_like

zeros

zeros_like

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np

g = np.array([1, 2, 3])                     # 用array方法创建了一个一维数组
print(g)
h = np.array([(1, 2, 3), (4, 5, 6)])        # 用array方法创建了一个二维数组
print(h)
print(h.ndim)                               # 输出轴的个数(秩)
print(h.shape)                              # 输出维度
print(h.size)                               # 输出元素总个数
a = np.arange(1, 5, 0.5)                    # 同range类似,步长为0.5,从15(不包过5print(a)
b = np.random.random((2, 2))                # 随机产生0~1的数字,生成一个维度为(22)的数组
print(b)
c = np.linspace(1, 2, 10, endpoint=False)   # 生成1~2之间的数,不包括最后一位
print(c)
d = np.ones([2, 3])                         # 生成维度为(23)的全为1的数组
print(d)
e = np.zeros((2, 2))                        # 生成维度为(22)的全为0的数组
print(e)
f = np.fromfunction(lambda i, j: (i + 1) * (j + 1), (9, 9)) # 以lambda函数生成一个维度为(99)的数组
print(f)

运行结果如下所示:

[1 2 3] [[1 2 3]  [4 5 6]] 2 (2, 3) 6 [1.  1.5 2.  2.5 3.  3.5 4.  4.5] [[0.24045529 0.37604814]  [0.95796953 0.89254894]] [1.  1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9] [[1. 1. 1.]  [1. 1. 1.]] [[0. 0.]  [0. 0.]] [[ 1.  2.  3.  4.  5.  6.  7.  8.  9.]  [ 2.  4.  6.  8. 10. 12. 14. 16. 18.]  [ 3.  6.  9. 12. 15. 18. 21. 24. 27.]  [ 4.  8. 12. 16. 20. 24. 28. 32. 36.]  [ 5. 10. 15. 20. 25. 30. 35. 40. 45.]  [ 6. 12. 18. 24. 30. 36. 42. 48. 54.]  [ 7. 14. 21. 28. 35. 42. 49. 56. 63.]  [ 8. 16. 24. 32. 40. 48. 56. 64. 72.]  [ 9. 18. 27. 36. 45. 54. 63. 72. 81.]]

使用 

方法

对数组进行操作,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np

a = np.arange(1, 5)                 # 生成1~4
print(a)
print(np.power(a, 2).sum())         # 平方和相加     
print(np.add(a, np.arange(4)))      # 两个数组相加

运行结果如下所示:

[1 2 3 4] 30 [1 3 5 7]

 改变数组,代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np

a = np.array([(1, 2, 3), (4, 5, 6)])
print(a.shape)
b = a.reshape(3, 2)             # 复制一个(32)的数组,本身未改变
print(b)
print(b.shape)
print(a)
a.resize(3, 2)                  # 将数组本身改变为(32)的数组中
print(a)
d = np.array([1, 3, 7])
e = np.array([3, 5, 8])
print(np.vstack((d, e)))        # 纵向拼接
print(np.hstack((d, e)))        # 横向拼接

运行结果如下所示:

(2, 3) [[1 2]  [3 4]  [5 6]] (3, 2) [[1 2 3]  [4 5 6]] [[1 2]  [3 4]  [5 6]] [[1 3 7]  [3 5 8]] [1 3 7 3 5 8]

同样的,改变数组,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np

x = np.arange(1, 17).reshape(4, 4)      # 生成一个从1~16,(44)的数组
print(x)
print(x.reshape(2, -1))                 # 定义成两行随机列
print(x.reshape(-1, 1))                 # 定义成一列随机行

 运行结果如下所示:

定义数组 [[ 1  2  3  4]  [ 5  6  7  8]  [ 9 10 11 12]  [13 14 15 16]] 两行随机列 [[ 1  2  3  4  5  6  7  8]  [ 9 10 11 12 13 14 15 16]] 一列随机行 [[ 1]  [ 2]  [ 3]  [ 4]  [ 5]  [ 6]  [ 7]  [ 8]  [ 9]  [10]  [11]  [12]  [13]  [14]  [15]  [16]]

操作

ndarry中可以通过一些运算符来操作数组,代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
print(a)
print(a[0])
print(a[:, [0, 2]])         # 第一列和第三列
print(a[::2])               # 奇数行
print(a[:, ::2])            # 奇数列
print(a[::-1])              # 交换行
print(a[:, ::-1])           #交换列

运行结果如下所示:

本身 [[ 1  2  3]  [ 4  5  6]  [ 7  8  9]       [10 11 12]]  第一行 [1 2 3] 第一列 [[ 1  3]  [ 4  6]  [ 7  9]  [10 12]] 奇数行 [[1 2 3]  [7 8 9]] 奇数列 [[ 1  3]  [ 4  6]  [ 7  9]  [10 12]] 交换行 [[10 11 12]  [ 7  8  9]  [ 4  5  6]  [ 1  2  3]] 交换列 [[ 3  2  1]  [ 6  5  4]  [ 9  8  7]  [12 11 10]]

运算 

ndarray中可以使用许多运算函数,并且有许多的运算符,可以便捷的对数组进行操作,代码如下所示:

基本运算

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np

aArray = np.array([(5, 4, 5), (5, 3, 4)])
bArray = np.array([(2, 3, 2), (2, 4, 2)])
cArray = aArray * bArray                # 数组值相乘
print(cArray)
aArray += bArray                        # 数组值相加
print(aArray)
a = np.array([1, 2, 3])
b = np.array([[1, 2, 3], [4, 5, 6]])
print(a + b)   # 广播性质,自动拓展成相同维度
print(a + 2)   # 同上

运行结果如下所示:

值相乘 [[10 12 10]  [10 12  8]] 值相加 [[7 7 7]  [7 7 6]] 广播性质,相加 [[2 4 6]  [5 7 9]] 广播性质,相加 [3 4 5]

方法运算

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np

aArray = np.array([(1, 2, 3), (4, 5, 6)])
print(aArray.sum())
print(aArray.sum(axis=0))   # 列求和
print(aArray.sum(axis=1))   # 行求和
print(aArray.min())         # 返回最小值
print(aArray.argmax())      # 返回最大值的索引
print(aArray.mean())        # 返回平均值
print(aArray.var())         # 返回方差
print(aArray.std())         # 返回标准差

运行结果如下所示:

21 [5 7 9] [ 6 15] 1 5 3.5 2.9166666666666665 1.707825127659933

线性代数运算

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np

x = np.array([[1, 2], [3, 4]])
r1 = np.linalg.det(x)       # 行列式
print(r1)
r2 = np.linalg.inv(x)       # 逆矩阵
print(r2)
r3 = np.dot(x, x)           # 矩阵内积
print(r3)

运行结果如下所示:

行列式 -2.0000000000000004 逆矩阵 [[-2.   1. ]  [ 1.5 -0.5]] 矩阵内积 [[ 7 10]  [15 22]]

注:与scipy的线性运算很像,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np

from scipy import linalg
arr = np.array([[1, 2], [3, 4]])  
print(linalg.det(arr))              # 行列式

运行结果如下所示:

 -2.0

ufunc函数

ufunc(universal function)是一种能对数组的每个元素进行操作的函数。NumPy内置的许多ufunc函数都是在C语言级别实现的,计算速度非常快。

记得有这个东西就行,好像每快多少,也可能是我用错了

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
基于Yolov8网络进行目标检测(三)-训练自己的数据集
前一篇文章详细了讲解了如何构造自己的数据集,以及如何修改模型配置文件和数据集配置文件,本篇主要是如何训练自己的数据集,并且如何验证。
python与大数据分析
2023/09/18
2.6K0
基于Yolov8网络进行目标检测(三)-训练自己的数据集
基于YOLOv8的遥感SAR舰船小目标识别
本文摘要:基于YOLOv8的遥感SAR舰船小目标,阐述了整个数据制作和训练可视化过程
AI小怪兽
2024/01/12
1.4K2
基于YOLOv8的摄像头下铁路工人安全作业检测(工人、反光背心和安全帽)系统
💡💡💡本文摘要:基于YOLOv8的铁路工人安全作业检测系统,属于小目标检测范畴,并阐述了整个数据制作和训练可视化过程​
AI小怪兽
2024/04/15
8400
【目标检测数据集】一、PASCAL VOC数据集简介
PASCAL VOC数据集是目标检测领域比较知名的数据集,该数据集分为VOC2007和VOC2012两个子集,其官方下载地址如下:
AI那点小事
2022/01/21
4.6K0
【目标检测数据集】一、PASCAL VOC数据集简介
Labelme 数据集转换和基于 DAMODEL 的 YOLOv8 模型训练指南
本教程介绍了如何将 Labelme 数据集转换为 YOLOv8 格式,并在 DAMODEL 平台上进行模型训练。
Skrrapper
2024/09/25
4970
Labelme 数据集转换和基于 DAMODEL 的 YOLOv8 模型训练指南
PyTorch版YOLOv4更新了,不仅适用于自定义数据集,还集成了注意力和MobileNet
从今年4月YOLOv4发布后,对于这个目标检测框架,问的最多的问题或许就是:「有没有同学复现YOLOv4的, 可以交流一下么」。由于原版YOLO使用C语言进行编程,光凭这一点就让不少同学望而却步。网上有很多基于TF/Keras和Caffe等的复现版本,但不少项目只给了代码,并没有给出模型在COCO、PASCAL VOC数据集上的训练结果。
计算机视觉研究院
2020/10/19
6580
PyTorch版YOLOv4更新了,不仅适用于自定义数据集,还集成了注意力和MobileNet
手把手入门教程:YOLOv8如何训练自己的数据集,交通信号灯识别
Ultralytics YOLOv8是Ultralytics公司开发的YOLO目标检测和图像分割模型的最新版本。YOLOv8是一种尖端的、最先进的(SOTA)模型,它建立在先前YOLO成功基础上,并引入了新功能和改进,以进一步提升性能和灵活性。它可以在大型数据集上进行训练,并且能够在各种硬件平台上运行,从CPU到GPU。
AI小怪兽
2023/11/03
7.3K0
手把手教你实现基于丹摩智算的YoloV8自定义数据集的训练、测试
DAMODEL(丹摩智算)是专为AI打造的智算云,致力于提供丰富的算力资源与基础设施助力AI应用的开发、训练、部署。
AI浩
2024/10/22
2340
手把手教你实现基于丹摩智算的YoloV8自定义数据集的训练、测试
【pytorch-ssd目标检测】制作类似pascal voc格式的目标检测数据集
pascal voc或yolo格式的数据可以使用labelimg进行标注:下载地址:
西西嘛呦
2020/08/26
9180
【pytorch-ssd目标检测】制作类似pascal voc格式的目标检测数据集
目标检测 | 常用数据集标注格式及生成脚本
目标检测是计算机视觉任务中的一个重要研究方向,其用于解决对数码图像中特定种类的可视目标实例的检测问题。目标检测作为计算机视觉的根本性问题之一,是其他诸多计算机视觉任务,例如图像描述生成,实例分割和目标跟踪的基础以及前提。而在解决此类问题时,我们常常需要使用自己的脚本或者利用标注工具生成数据集,数据集格式往往会多种多样,因此对于目标检测任务而言,为了更好地兼容训练,大多数目标检测模型框架会默认支持几种常用的数据集标注格式,常见的分别是COCO,Pascal VOC,YOLO等等。本文主要介绍上述几种数据集格式以及我写的Python脚本(一般需要根据实际情况再改改)。
Justlovesmile
2021/12/14
5K0
目标检测 | 常用数据集标注格式及生成脚本
YOLOv5 实现目标检测(训练自己的数据集实现猫猫识别)
2020年6月10日,Ultralytics在github上正式发布了YOLOv5。YOLO系列可以说是单机目标检测框架中的潮流前线了,YOLOv5并不是一个单独的模型,而是一个模型家族,包括了YOLOv5s(最小)、YOLOv5m、YOLOv5l、YOLOv5x(最大)。目前v6.0版本又新增一层YOLOv5n模型,代替YOLOv5s成为最小模型,在所有模型中速度更快但精度也更低。
全栈程序员站长
2022/07/01
5.1K0
YOLOv5 实现目标检测(训练自己的数据集实现猫猫识别)
pascal voc数据集下载_目标检测分类
VOC2007 train_val_test & VOC2012 train_val 百度云下载链接,提取码: jz27
全栈程序员站长
2022/11/09
1.9K0
pascal voc数据集下载_目标检测分类
yolov8训练自定义目标检测模型
首先得准备好数据集,你的数据集至少包含images和labels,严格来说你的images应该包含训练集train、验证集val和测试集test,不过为了简单说明使用步骤,其中test可以不要,val和train可以用同一个,因此我这里只用了一个images
叶茂林
2023/10/19
1.9K0
yolov8训练自定义目标检测模型
从零开始带你一步一步使用YOLOv3训练自己的数据
YOLOv3是比较常见和常用的深度学习目标检测(Object Dection)算法。今天给大家介绍一下如何一步一步使用YOLOv3训练自己的数据集。
红色石头
2022/01/10
2.5K1
从零开始带你一步一步使用YOLOv3训练自己的数据
基于YOLOv8的摄像头吸烟行为检测系统(Python源码+Pyqt6界面+数据集)
💡💡💡本文主要内容:详细介绍了摄像头下吸烟行为检测系统,在介绍算法原理的同时,给出Pytorch的源码、训练数据集以及PyQt6的UI界面。在界面中可以选择各种图片、视频进行检测识别,可进行置信度、Iou阈值设定,结果可视化等。
AI小怪兽
2024/01/29
1.6K5
【目标检测】SSD目标检测
场景文字识别 目标检测任务的目标是给定一张图像或是视频帧,让计算机找出其中所有目标的位置,并给出每个目标的具体类别。对于人类来说,目标检测是一个非常简单的任务。然而,计算机能够“看到”的仅有一些值为0 ~ 255的矩阵,很难解图像或是视频帧中出现了人或是物体这样的高层语义概念,也就更加难以定位目标出现在图像中哪个区域。与此同时,由于目标会出现在图像或是视频帧中的任何位置,目标的形态千变万化,图像或是视频帧的背景千差万别,诸多因素都使得目标检测对计算机来说是一个具有挑战性的问题。 【目标检测】 SSD目标
用户1386409
2018/04/02
4.4K1
【目标检测】SSD目标检测
《我的PaddlePaddle学习之路》笔记九——使用VOC数据集的实现目标检测
目标检测的使用范围很广,比如我们使用相机拍照时,要正确检测人脸的位置,从而做进一步处理,比如美颜等等。在目标检测的深度学习领域上,从2014年到2016年,先后出现了R-CNN,Fast R-CNN, Faster R-CNN, ION, HyperNet, SDP-CRC, YOLO,G-CNN, SSD等神经网络模型,使得目标检测不管是在准确度上,还是速度上都有很大提高,几乎可以达到实时检测。
夜雨飘零
2020/05/06
1.2K0
《我的PaddlePaddle学习之路》笔记九——使用VOC数据集的实现目标检测
YOLOv9如何训练自己的数据集(NEU-DET为案列)
💡💡💡 2024年计算机视觉顶会创新点适用于Yolov5、Yolov7、Yolov8等各个Yolo系列,专栏文章提供每一步步骤和源码,轻松带你上手魔改网络 !!!
AI小怪兽
2024/03/26
1.1K0
YOLOV3目标检测模型训练实例
从零开始学习使用keras-yolov3进行图片的目标检测,比较详细地记录了准备以及训练过程,提供一个信号灯的目标检测模型训练实例,并提供相关代码与训练集。
WindRunnerMax
2020/08/27
1.2K0
YOLOV3目标检测模型训练实例
paddlepaddle目标检测之水果检测(yolov3_mobilenet_v1)
(1)进入到https://aistudio.baidu.com/aistudio/projectoverview/public
西西嘛呦
2020/08/26
7890
paddlepaddle目标检测之水果检测(yolov3_mobilenet_v1)
推荐阅读
相关推荐
基于Yolov8网络进行目标检测(三)-训练自己的数据集
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档