IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Numpy核心数据结构与DeepLearning常用操作 -> 正文阅读

[数据结构与算法]Numpy核心数据结构与DeepLearning常用操作

现在的主流深度学习框架 PyTorch 与 TensorFlow 中最基本的计算单元 Tensor,都与 NumPy 数组有着类似的计算逻辑,所以掌握了 NumPy 对学习这两种框架都有很大帮助。

NumPy 是用于 Python 中科学计算的一个基础包。它提供了一个多维度的数组对象(稍后展开),以及针对数组对象的各种快速操作,例如排序、变换,选择等。

1. Numpy核心数据结构

NumPy 数组
数组对象是 NumPy 中最核心的组成部分,这个数组叫做 ndarray,是“N-dimensional array”的缩写。其中的 N 是一个数字,指代维度。

1.1 创建数组

最简单的方法就是把一个列表传入到 np.array() 或 np.asarray() 中,这个列表可以是任意维度的。
np.array() 属于深拷贝,np.asarray() 则是浅拷贝。

import numpy as np
arr_1_d = np.asarray([1])
print(arr_1_d)
>>> [1]
arr_2_d = np.asarray([[1, 2], [3, 4]])
print(arr_2_d)
>>> [[1 2]
    [3 4]]

1.2 数组的属性

  • ndim
    ndim 表示数组维度(或轴)的个数。刚才创建的数组 arr_1_d 的轴的个数就是 1,arr_2_d 的轴的个数就是 2。

arr_1_d.ndim
1
arr_2_d.ndim
2
  • shape
    shape 表示数组的维度或形状, 是一个整数的元组,元组的长度等于 ndim。
    arr_1_d 的形状就是(1,)(一个向量), arr_2_d 的形状就是 (2, 2)(一个矩阵)。
arr_1_d.shape
>>> (1,)
arr_2_d.shape
>>> (2, 2)
  • size
    size,也就是数组元素的总数,它就等于 shape 属性中元素的乘积。

  • dtype
    dtype是一个描述数组中元素类型的对象。使用 dtype 属性可以查看数组所属的数据类型。NumPy 中大部分常见的数据类型都是支持的,例如 int8、int16、int32、float32、float64 等。dtype 是一个常见的属性,在创建数组,数据类型转换时都可以看到它。

arr_2_d = np.asarray([[1, 2], [3, 4]], dtype='float')
arr_2_d.dtype
>>> dtype('float64')

数组的数据类型当然也可以改变,我们可以使用 astype() 改变数组的数据类型,不过改变数据类型会创建一个新的数组,而不是改变原数组的数据类型。

arr_2_d.dtype
>>> dtype('float64')
arr_2_d.astype('int32')
>>> array([[1, 2],
       [3, 4]], dtype=int32)
arr_2_d.dtype
>>> dtype('float64')
# 原数组的数据类型并没有改变
arr_2_d_int = arr_2_d.astype('int32')
arr_2_d_int.dtype
>>> dtype('int32')

不能通过直接修改数据类型来修改数组的数据类型,这样代码虽然不会报错,但是数据会发生改变.

1.3 其他创建数组的方式

  • np.ones
>>>np.ones(shape=(2,3))
array([[1., 1., 1.],
       [1., 1., 1.]])
>>>np.ones(shape=(2,3), dtype='int32')
array([[1, 1, 1],
       [1, 1, 1]], dtype=int32)
  • np.zeros()

  • np.arange()

# 创建从0到4的数组
np.arange(5)
>>> array([0, 1, 2, 3, 4])
# 从2开始到4的数组
np.arange(2, 5)
>>> array([2, 3, 4])
# 从2开始,到8的数组,跨度是3
np.arange(2, 9, 3)
>>> array([2, 5, 8])
  • np.linspace()
    可以用 np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)创建一个数组,具体就是创建一个从开始数值到结束数值的等差数列。
    • start:必须参数,序列的起始值。
    • stop:必须参数,序列的终点。
    • num:序列中元素的个数,默认是 50。
    • endpoint:默认为 True,如果为 True,则数组最后一个元素是 stop。
    • retstep:默认为 False,如果为 True,则返回数组与公差。

1.4 数组的轴

这是一个非常重要的概念,也是 NumPy 数组中最不好理解的一个概念。它经常出现在 np.sum()、np.max() 这样关键的聚合函数中。

2. 深度学习中的常用操作

以一个图像分类项目为例,看看NumPy 的在实际项目中都有哪些重要功能。
想要解决这个图片分类问题,任务可以分解成数据加载、训练与模型评估三部分。其中数据加载跟模型评估中,就经常会用到 NumPy 数组的相关操作。

2.1 数据加载阶段

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-06-26 17:03:41  更:2022-06-26 17:05:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:41:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码