「Python数据科学」标量、向量、矩阵、张量与多维数组的辨析

server/2024/12/26 14:24:32/

引言

数据科学中,有很多概念,其中,最容易搞混的就是标量、向量、矩阵、张量了。具体到这些概念的落地实现,又与多维数组有着密不可分的联系。

本文就来尝试对这些概念进行简要地梳理,从而更加清晰地理解这些概念及其关系。

本文的主要内容有:

1、标量与向量

2、矩阵与二维数组

3、张量与多维数组

标量与向量

如果初中数学的知识还没有全部归还给老师,那么对标量和向量的概念,应该还是有些印象的。

标量(Scalar)

所谓标量,是一个单一的数值,起到标识大小的作用,只具有大小,而没有方向。

对应到Python中,它可以是整数、浮点数或者复数等,比如5、-10、3.14159都是标量。

向量(Vector)

所谓向量,最大的特点是既有大小,又有方向。

一个向量,在Python或者NumPy中,可以对应到一个一维数组。数组中的每一个值都是一个标量。

如果将向量放置到空间当中,向量的元素个数,对应到向量所处的空间的维度。

所以,一个具有n个元素的向量,在n维空间中,可以标识为从原点(每个维度的标量值均为0)出发,指向这个向量在n维空间中所对应的点。

矩阵与二维数组

矩阵(Matrix)同样是一个数学概念,通常用于在线性代数中,用来表示一组数字或其他数学对象的矩形数组。

矩阵的元素按行和按列的形式进行排列,通常称为“行”和“列”。在计算机科学中,尤其在数据分析、机器学习和图像处理等领域,矩阵的概念与二维数组是密切相关的。

概括来说,矩阵是一个数据概念,其投射、应用到计算机科学中,对应的实现方式通常是二维数组。比如,我们可以通过NumPy定义一个二维数组来表示矩阵。

在机器学习、深度学习中,会反复应用到矩阵的乘法运算,但是,我们只需要知道矩阵乘法的规则, 就足够应付常见的需求场景了。

矩阵的乘法,必须满足:

(M行,N列) x (N行,L列) = (M行,L列)

感兴趣的同学,可以自行检索补充。

在NumPy中可以通过ndarray来表示矩阵,也可以通过matrix,下面通过代码简单演示一下:

首先创建两个二维数组表示矩阵A和B:

e16590f1209ef98ccc79cafa84e39172.jpeg

在NumPy中进行基于ndarry的矩阵相乘(点乘)的方法有3种:

1、np.dot(A, B)

2、np.matmul(A, B)

3、A@B

代码如下:

51baa8f7630e9fc15806a9d7f92bcd4e.jpeg

在NumPy中还提供了matrix直接来表示矩阵,这里只是演示一下,通常还是建议使用ndarray:

首先创建两个matrix:

a16ff403c1645d95dd9fc298b7bbc920.jpeg

同样有3种方法进行矩阵相乘,np.dot()和np.matmul()两个函数是可以通用的,不同于ndarray,matrix可以直接使用*表示矩阵的点乘运算:

479694b9904e40d61965dbc15dc2b80e.jpeg

张量与多维数组

如果没有接触过深度学习,可能对“张量”这个概念比较陌生,甚至从未听过。

张量(Tensor)其实是一个更为广泛的数学概念,它通常用于进行多维数据的表示。在机器学习、深度学习和物理学等多个领域中,张量的使用变得越来越普遍。

由于张量是一个更加广泛的概念,因而可以将标量、向量、矩阵的概念进行统一:

1、标量可以看作是0阶张量。

2、向量可以看作是1阶张量。

3、矩阵可以看作是2阶张量。

4、3阶及3阶以上的张量,通常被称之为高阶张量。

可以通过ndarray分别创建不同阶的张量:

96c8ec1418b9197d1adc09e491b95ee3.jpeg

张量概念的底层,同样是基于多维数组进行存储实现。为了便于使用,在Tensorflow和PyTorch等深度学习框架中,张量都是作为最基本的数据结构进行支持的,可以用于表示输入数据、模型参数等。

比如,使用PyTorch进行张量的创建:

9a2dc4938a51069edd88687787982acc.jpeg

总结

本文简单辨析了标量、向量、矩阵和张量这几个术语的含义,标量、向量和矩阵可以看作是特殊的张量。所有的张量,在Python、NumPy、PyTorch中,底层可以理解为都是以多维数组的形成进行实现。

以上就是本文的全部内容,感谢您的拨冗阅读!

5f784c450ac82ccc7157ca6d26e94aab.jpeg


http://www.ppmy.cn/server/153343.html

相关文章

斐波那契数【东北大学oj数据结构10-1】C++

编写一个程序,打印给定整数 n 的第 n 个斐波那契数。 第 n 个斐波那契数由以下递归公式定义: f(n){1 n0,1; f(n−1)f(n−2)​​ n>1​.} 输入 给出一个整数 n。 输出 在一行中打印第 n 个斐波那契数。 约束 0≤n≤44 输入样例 3 输出…

Ubuntu 24.04 APT源配置详解

引言 在Ubuntu系统中,APT(Advanced Package Tool)是用于安装、更新和管理软件包的核心工具。了解APT源配置对于系统管理员和用户来说至关重要,因为它决定了软件包的来源和更新渠道。本文将详细介绍Ubuntu 24.04中的APT源配置&…

探索 ES6 基础:开启 JavaScript 新篇章

文章目录 一、ES6 简介与重要性二、变量声明新方式(一)let 关键字(二)const 关键字 三、模板字符串四、箭头函数五、函数参数默认值六、Spread / Rest 操作符(一)Spread 操作符(二)R…

RK3506开发板:智能硬件领域的新选择,带来卓越性能与低功耗

在现代智能硬件开发中,选择一款性能稳定、功耗低的开发板是确保产品成功的关键。Rockchip最新推出的RK3506芯片,凭借其卓越的能效比、多功能扩展性和优秀的实时性能,已经成为智能家电、工业控制、手持终端等领域的热门选择。而基于RK3506的Ar…

CSES-1674 Subordinates

题目传送门https://vjudge.net/problem/CSES-1674 解题思路 其实就是求每个子树的大小。 代码 #include<bits/stdc.h> using namespace std;int n; vector<int> g[200001]; int sz[200001]; void dfs(int x,int fa) {sz[x]1;for(auto y:g[x]){if(y!fa){dfs(y,x)…

以客户成功为核心,镜舟科技驱动数据库开源商业化创新

镜舟科技 CEO 孙文现 2024 年&#xff0c;在 StarRocks 社区朋友们和众多行业大客户的支持下&#xff0c;镜舟科技向前迈进了一小步&#xff0c;同时对于镜舟而言也是商业化推进的一大步。今年&#xff0c;镜舟实现了从追求市占率到追求商业成功的战略转型&#xff0c;并展现出…

Hive其九,排名函数,练习和自定义函数

目录 一、排名函数 -大名鼎鼎 1、row_number() 2、rank() 2、rank() 3、dense_rank() 二、练习 三、自定义函数 1、将字母变大写案例 2、输入 出生年月日求年龄 函数 一、排名函数 -大名鼎鼎 row_number() rank() dense_rank() 1、row_number() row_number从1开始&a…

Flume和Kafka的区别?

Flume 一般用于日志采集&#xff0c;可以定制很多数据源&#xff0c;减少开发量&#xff0c;基本架构是一个 Flume 进程agent&#xff08; source 、拦截器、选择器、 channel<Memory Channel 、 File Channel> 、 sink &#xff09;&#xff0c;其中传递的是原 子性的ev…