【吴恩达机器学习-week2】Python、NumPy、向量化


这门课程涉及到一些 科学计算的基础知识,特别是使用Python中的NumPy科学计算包。 NumPy是Python中用于科学计算的一个重要工具,它提供了一个强大的多维数组对象和各种用于处理这些数组的函数。通过NumPy,我们可以高效地进行 数据操作、数学计算、线性代数等任务,这对于科学计算和数据分析非常有用。

import numpy as np    
import time

1.1 目标

在这个实验中,你将:

  • 回顾在课程1中使用的NumPy和Python的特性

1.2 有用的参考资料

2 Python 和 NumPy

Python是我们在这门课程中将使用的编程语言。它具有一组数字数据类型和算术操作。NumPy是一个库,它扩展了Python的基本功能,以添加更丰富的数据集,包括更多的数值类型、向量、矩阵和许多矩阵函数。NumPy和Python可以相当无缝地配合使用。Python的算术运算符可以用于NumPy数据类型,许多NumPy函数也将接受Python数据类型。

3 向量

3.1 概要

向量,在这门课程中的使用方式,是有序的数字数组。在表示法上,向量用粗体小写字母表示,如 x \mathbf{x} x。向量的元素都是相同类型的。例如,一个向量不会同时包含字符和数字。数组中元素的数量通常被称为维度,虽然数学家可能更喜欢 这个术语。所示的向量具有维度 n n n。向量的元素可以通过索引来引用。在数学环境中,索引通常从1到n。在计算机科学和这些实验中,索引通常从0到n-1。在表示法中,当单独引用向量的元素时,将使用下标表示索引,例如,向量 x \mathbf{x} x 的第 0 0 0 个元素用 x 0 x_0 x0 表示。注意,这种情况下的 x x x 不是粗体。

3.2 NumPy数组

NumPy 的基本数据结构是一个可索引的、n 维的数组,其中包含相同类型(dtype)的元素。您可能会立即注意到我们已经重载了术语“维度”。上面,它是向量中的元素数量,而这里,维度指的是数组的索引数量。一个一维或 1-D 数组有一个索引。在课程1中,我们将把向量表示为NumPy 1-D数组。

  • 1-D数组,形状为 (n,):n个元素,索引范围从[0]到[n-1]

3.3 向量构造

在NumPy中,数据创建函数通常会有一个第一个参数,它是对象的形状。这可以是一个单一的值,用于表示一维结果,也可以是一个元组 (n,m,…),指定结果的形状。下面是使用这些函数创建向量的示例。

# NumPy routines which allocate memory and fill arrays with value
a = np.zeros(4);                print(f"np.zeros(4) :   a = {
     
     a}, a shape = {
     
     a.shape}, a data type = {
     
     a.dtype}")
a = np.zeros((4,));             print(f"np.zeros(4,) :  a = {
     
     a}, a shape = {
     
     a.shape}, a data type = {
     
     a.dtype}")
a = np.random.random_sample(4); print(f"np.random.random_sample(4): a = {
     
     a}, a shape = {
     
     a.shape}, a data type = {
     
     a.dtype}")

# print
np.zeros(4) :   a = [0. 0. 0. 0.], a shape = (4,), a data type = float64
np.zeros(4,) :  a = [0. 0. 0. 0.], a shape = (4,), a data type = float64
np.random.random_sample(4): a = [0.20091455 0.8554035  0.89419993 0.85645191], a shape = (4,), a data type = float64

一些数据创建例程不接受形状元组:

# NumPy routines which allocate memory and fill arrays with value but do not accept shape as input argument
a = np.arange(4.);              print(f"np.arange(4.):     a = {
     
     a}, a shape = {
     
     a.shape}, a data type = {
     
     a.dtype}")
a = np.random.rand(4);          print(f"np.random.rand(4): a = {
     
     a}, a shape = {
     
     a.shape}, a data type = {
     
     a.dtype}")

# print
np.arange(4.):     a = [0. 1. 2. 3.], a shape = (4,), a data type = float64
np.random.rand(4): a = [0.06285392 0.46714606 0.06818969 0.45556927], a shape = (4,), a data type = float64

值也可以手动指定。

# NumPy routines which allocate memory and fill with user specified values
a = np.array([5,4,3,2]);  print(f"np.array([5,4,3,2]):  a = {
     
     a},     a shape = {
     
     a.shape}, a data type = {
     
     a.dtype}")
a = np.array([5.,4,3,2]); print(f"np.array([5.,4,3,2]): a = {
     
     a}, a shape = {
     
     a.shape}, a data type = {
     
     a.dtype}")

# print
np.array([5,4,3,2]):  a = [5 4 3 2],     a shape = (4,), a data type = int32
np.array([5.,4,3,2]): a = [5. 4. 3. 2.], a shape = (4,), a data type = float64

这些操作都创建了一个具有四个元素的一维向量 a。a.shape 返回了其维度。在这里我们看到 a.shape = (4,),表示一个具有四个元素的一维数组

3.4 向量的操作

让我们通过向量进行一些操作。

3.4.1 索引

可以通过索引和切片访问向量的元素。NumPy 提供了非常完整的索引和切片功能。我们在这里只探讨课程所需的基础知识。更多详细信息请参考 切片和索引

索引 意味着通过在数组中的位置引用 一个元素

切片 意味着根据其索引从数组中获取 子集 元素。

NumPy 从零开始索引,所以向量 a \mathbf{a} a 的第三个元素是 a[2]

#vector indexing operations on 1-D vectors
a = np
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

FOUR_A

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值