python|【Python数据科学快速入门系列 | 01】Numpy初窥——基础概念

这是机器未来的第36篇文章

原文首发地址:https://blog.csdn.net/RobotFutures/article/details/125969065
python|【Python数据科学快速入门系列 | 01】Numpy初窥——基础概念
文章图片


文章目录
  • 1. 主题
  • 2. Numpy是什么?
  • 3. Numpy的基础概念
    • 3.1 标量、向量、矩阵、张量
      • 3.1.1标量
      • 3.1.2 向量
      • 3.1.3 矩阵
      • 3.1.4 张量
  • 4. Numpy的核心:ndarray对象的属性
    • 4.1 维度或轴 ndarray.ndim与形状 ndarray.shape
    • 4.2 容器的数据类型dtype
    • 4.3 容器的大小 ndarray.size

1. 主题 本文简明扼要的描述了Numpy的概念。
2. Numpy是什么? NumPy是Python中科学计算的基础包。它是一个Python库,提供多维数组对象,各种派生对象(如掩码数组和矩阵),以及用于数组快速操作的各种API,包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅立叶变换、基本线性代数,基本统计运算和随机模拟等等。Numpy底层是用C语言实现的,所以其计算速度极快。
Numpy、pandas、matplotlib被称为Python三剑客。
俗话说流水的上层框架(Tensorflow、Pytorch、PaddlePaddle等),铁打的Numpy,其地位可见一斑。
Numpy被称为数据科学版的list,其核心就是ndarray对象,ndarray(N dim array)是同构多维数组,和list、tuple、dict、set一样,ndarray也是数据容器,有这样一句话,叫做:
  • list是python数据容器
  • ndarray是机器学习的数据容器
  • tensor是深度学习的数据容器
3. Numpy的基础概念 3.1 标量、向量、矩阵、张量 ndarray对象在实际应用中,数组可能会是多个维度的,那么零维、一维、二维、三维…,在Python中是怎么称呼的呢,这里了解一下几个概念:标量、向量、矩阵、张量。
3.1.1标量
就是一个轴上的点,可以理解为0维的一个点。
举例:
x = 5

就是一个标量
3.1.2 向量
就是沿着一个轴的有向序列,可以理解为1维的一条有向直线
举例:
x = [1, 2, 5, 8, 10]

就是一个向量,它是有方向的,它是list,它是有方向的。
3.1.3 矩阵
就是两个互相垂直的轴的数据序列,可以理解为2维的两条垂直的线构成的平面
举例:
import numpy as npx = np.random.randint(low=1, high=10, size=(4, 5)) x

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

【python|【Python数据科学快速入门系列 | 01】Numpy初窥——基础概念】x是一个4*5的矩阵
3.1.4 张量
就是三个或以上互相垂直的轴上的数据序列,可以理解为三维以上的空间上的数据集合,也可以理解为高维数组。
import numpy as npx = np.random.randint(low=1, high=10, size=(3, 4, 5)) x

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

4. Numpy的核心:ndarray对象的属性 4.1 维度或轴 ndarray.ndim与形状 ndarray.shape
import numpy as np# 创建一个三维的数组,每个维度元素的个数分别为3,4,5 x = np.random.randint(low=1, high=10, size=(3, 4, 5)) print(f"dim:{x.ndim}, x.shape:{x.shape}") print(x)

dim:3, x.shape:(3, 4, 5) [[[6 7 5 9 2] [7 3 5 4 9] [4 5 2 5 3] [9 2 9 8 4]] [[7 2 2 6 1] [1 8 2 5 6] [6 4 6 7 3] [5 2 3 1 4]] [[5 8 8 4 5] [1 6 8 7 4] [6 1 8 5 4] [4 7 4 9 4]]]

ndim纬度其实是数据轴的概念,几个纬度就是有几个垂直的轴的数量,shape形状描述的是每个轴上分布的数据点的数量。
以数据对象x为例,它的数据纬度为3, 它的形状为(3, 4, 5), 在第一个轴上的数据点是3个, 第二个轴上的数据点是4个,第三个轴上的数据点是5,这是从数据的角度。
有时候我们会将shape中的数字也认为是维度,这里需要注意的是,这个维度被简称了,实际说的是特征维度。
举个例子:
有个人的简化特征描述:姓名、性别、身高、年龄,现在有3个样本,分别是
zhansan,male,180,22 lisi,male,185,26 lucy,female,168,18

这个数据集的形状为(3,4),3个样本,每个样本有4个特征(姓名、性别、身高、年龄),大家常说的shape中的4的维度,就是指的特征维度,从样本来说,的确有4个特征维度来描述这个人。
思考:
现在有一个数据集,它的数据点形状为(N, H, W, C),标签的形状为(N,),模型的输入形状为(N, H, W, C),输出的结果的形状为(N, 1),那么该如何处理呢?
不处理行吗?不行,因为模型在训练的时候需要评估模型质量,会将输出的结果和标签进行偏差计算,如果纬度不一致,会触发ndarray的广播机制,导致不可预知的后果,那么如何修改标签的形状和输出的结果一致呢?
使用ndarray.reshape方法。
import numpy as npx = np.random.randint(low=1, high=10, size=(30,))print(x.shape)x = x.reshape(30, 1)print(x.shape)

(30,) (30, 1)

x.reshape??

[0; 31mDocstring:[0m a.reshape(shape, order='C')Returns an array containing the same data with a new shape.Refer to `numpy.reshape` for full documentation.See Also -------- numpy.reshape : equivalent functionNotes ----- Unlike the free function `numpy.reshape`, this method on `ndarray` allows the elements of the shape parameter to be passed in as separate arguments. For example, ``a.reshape(10, 11)`` is equivalent to ``a.reshape((10, 11))``. [0; 31mType:[0mbuiltin_function_or_method

reshape方法不会改变数据的内容,只会改变数据形状,只要形状的乘积和原来的乘积相等即可。
4.2 容器的数据类型dtype ndarray是同构多维数组,它的数据类型都是一样的。
import numpy as np#x.ndim - 查看容器的维度或轴的数量 x = np.random.randint(low=1, high=10, size=(3, 4, 5)) # 获得ndarray对象的数据维度,可以看到他的维度为3 print(f"dtype:{x.dtype}")

dtype:int64

在机器学习中,操作的数据类型经常是float类型的,怎样将int32修改为float呢?使用ndarray.astype()方法修改
import numpy as np#x.ndim - 查看容器的维度或轴的数量 x = np.random.randint(low=1, high=10, size=(3, 4, 5)) x = x.astype(float) print(f"dtype:{x.dtype}")

dtype:float64

ndarray支持的数据类型挺多的,例如int8,int16,int32, int64,uint8,uint16,uint32,float16, float32, float64,complex等
4.3 容器的大小 ndarray.size size的大小为shape形状中数字的乘积,表示的是数据容器中数据的个数,并不是占用内存的大小。
import numpy as np#x.ndim - 查看容器的维度或轴的数量 x = np.random.randint(low=1, high=10, size=(3, 4, 5)) # 获得ndarray对象的数据维度,可以看到他的维度为3 print(f"size:{x.size}")

size:60

最后,简单总结一下概念,Numpy被称为数据科学版的list,可以从ndarray的属性就可以初窥Numpy的强大了。
Numpy为啥这么强大,请继续期待下一节:创建ndarray的方法。
写在末尾:
  • 博客简介:专注AIoT领域,追逐未来时代的脉搏,记录路途中的技术成长!
  • 专栏简介:从0到1掌握SELinux的使用。
  • 面向人群:嵌入式Linux软件工程师
  • 专栏计划:接下来会逐步发布跨入人工智能的系列博文,敬请期待
    • Python零基础快速入门系列
    • 数据科学系列
    • 人工智能开发环境搭建系列
    • 机器学习系列
    • 物体检测快速入门系列
    • 自动驾驶物体检测系列
python|【Python数据科学快速入门系列 | 01】Numpy初窥——基础概念
文章图片

    推荐阅读