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 数据加载阶段

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值