数据分析与可视化基础 (1) :NumPy数组库

NumPy是一个开源的Python科学计算基础库,主要用于对大量数据进行高效存储和计算,提供了许多向量和矩阵操作,能够帮助轻松完成科学与工程中常用的各种计算,不仅方便易用而且效率更高。

PyTorch张量的语法与NumPy数组基本相同或相似,具体区别详见下文。

import numpy as np

数据分析与可视化基础 (1) :NumPy数组库
数据分析与可视化基础 (2) :Pandas标签库
数据分析与可视化基础 (3) :Matplotlib绘图库



1 NumPy数组基础

1.1 数据类型

一个NumPy数组只容纳一种数据类型,可分为整数型数组浮点型数组布尔型数组等。初始化时可通过设置dtype属性来指定数据类型。

同化定理:往整数型数组里插入浮点数,该浮点数会自动被截断为整数;往浮点型数组里插入整数,该整数会自动升级为浮点数。

想实现整数型数组和浮点型数组的相互转换,可以使用.astype()方法指定转换类型(PyTorch中为.type())。整数型数组在运算过程中升级为浮点型数组。

arr1 = np.array([1, 2, 3])		# 元素若都是整数,则为整数型数组
arr2 = np.array([1.0, 2, 3])	# 内含浮点数,则为浮点型数组

print(arr2.astype(int))	# 浮点型降级
print(arr1 + 10.0)		# 整数型进行各种浮点运算会升级
print(arr1 / 1)			# 整数型遇到除法也会升级(即使除以整数)

在这里插入图片描述

1.2 形状参数(shape)

不同维度的数组在外形上的表现为: n n n 维数组使用 n n n 层中括号表示。可以用形状参数来描述数组的形状:

  • 一维数组的形状参数:x(x,)
    【例】[1, 2, 3]的形状为3[3,]
  • 二维数组的形状参数:(x, y)
    【例】[[1, 2, 3]]的形状为(1, 3)
  • 三维数组的形状参数:(x, y, z)
    【例】[[[1, 2, 3]]]的形状为(1, 1, 3)

使用数组的shape属性查看形状参数。

arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
print(arr, arr.shape)

在这里插入图片描述

本文将一维数组称为向量, 二维数组称为矩阵。

可使用数组的重塑方法.reshape()(或.resize()来直接修改数组)对数组进行重塑,需要传入重塑后的形状参数(shape)。给定了其他维度的数值,剩下一个维度可以填-1,让其自动计算。

1.3 数组初始化函数

1.3.1 创建指定数组:np.array()

当明确知道数组每一个元素的具体数值时,使用np.array()函数将Python列表转化为NumPy数组。

arr1 = np.array([1, 2, 3])              # 创建向量
arr2 = np.array([[1, 2, 3]])            # 创建行矩阵
arr3 = np.array([[1], [2], [3]])        # 创建列矩阵
arr4 = np.array([[1, 2, 3], [4, 5, 6]]) # 创建矩阵
print(arr1, '\n')
print(arr2, '\n')
print(arr3, '\n')
print(arr4)

在这里插入图片描述

PyTorch中的torch.tensor()用同样方式创建指定张量。NumPy的 n n n 维数组与PyTorch的 n n n 阶张量可相互转换:

# 数组arr转为张量ts
ts = torch.tensor(arr);
# 张量ts转为数组arr
arr = np.array(ts)

1.3.2 创建递增数组:np.arange()

使用np.arange()函数创建递增数组,可设置左闭右开区间的两端点以及步长(默认步长为1)。(同Python的range()函数)

arr1 = np.arange(10)        # [0, 10)
arr2 = np.arange(-8, 8)     # [-8, 8)
arr3 = np.arange(1, 21, 2)  # [1, 21), 步长为2
print(arr1)
print(arr2)
print(arr3)

在这里插入图片描述

1.3.3 创建同值数组:np.zeros()、np.ones()

使用np.zeros()函数创建零向量/全0数组,使用np.ones()函数创建单位向量/全1数组。给全1矩阵乘以标量即得全为任意指定数值的矩阵。

arr1 = np.zeros(5)              # 形状为5的零向量
arr2 = np.ones((1, 3))          # 形状为(1, 3)的全1矩阵
arr3 = 3.14 * np.ones((3, 4))   # 形状为(3, 4)的元素全为3.14的矩阵
print(arr1, '\n')
print(arr2, '\n')
print(arr3)

在这里插入图片描述

1.3.4 创建随机数组:np.random系列

使用np.random系列函数创建随机数组

  1. np.random.random():返回0~1均匀分布的浮点型随机数组,需传入形状参数。可进一步操作实现生成任意范围内的随机浮点数。(PyTorch中为torch.rand()
arr1 = np.random.random(10)
arr2 = (100 - 60) * np.random.random((3, 3)) + 60	# 创建60~100均匀分布的随机数组
print(arr1, '\n')
print(arr2)

在这里插入图片描述

  1. np.random.randint():创建整数型随机数组,在指定形状参数之前还需额外输入范围参数。(PyTorch中为torch.randint(),且不接纳一维向量)
arr1 = np.random.randint(10, 100, (3, 5))	# 元素为[10, 100)上的整数型随机数
print(arr1)

在这里插入图片描述

  1. np.random.normal():生成服从正态分布的随机数组,在指定形状参数之前还需额外输入正态参数,即均值、方差。(PyTorch中为torch.normal(),且不接纳一维向量)
  2. np.random.randn():直接生成服从标准正态分布(均值为0、方差为1)的随机数组,只需指定形状参数。(PyTorch中为torch.randn()
arr1 = np.random.randn(3, 4)   # 等价于 np.random.normal(0, 1, (3, 4))
print(arr1)

在这里插入图片描述

1.3.5 其他常用的创建方法

  • np.empty(shape):内存创建。分配数组大小内存,而不产生实际值。具有相同效果的还有有empty_like()函数。
  • np.full(shape, val):填充创建。指定数组形状,再指定一个数填充入该结构中。
  • np.linspace(start, end, num=50):等差数组创建,生成从startend上的num个数的等差数列。参考arange()函数。
  • np.logspace(start, end, num=50, base=10):等比数组创建,生成从start * baseend * base上的num个数的等比数列。参考arange()函数。
  • ones_like(a)zeros_like(a)full_like(a, val):根据所传入数组的形状创建

2 数组的索引

2.1 访问数组元素

与Python列表基本一致,访问NumPy数组元素时使用中括号,索引由0开始。

arr1 = np.arange(1, 10)
print(arr1)

print(arr1[3], arr1[-1])

arr1[5] = 99.8	# 元素可被修改;浮点数插入到整数型数组时会被截断 
print(arr1)

在这里插入图片描述

访问多维数组时,只使用1个中括号,各维索引之间用逗号分隔即可。

arr1 = np.arange(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Akira37

💰unneeded

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值