003_vector_conventions_in_MATLA中的向量约定

2024-03-26 12:36

本文主要是介绍003_vector_conventions_in_MATLA中的向量约定,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

MATLAB中的向量约定

1. 前言

MATLAB是一种用于数值计算和数据可视化的高级编程语言。以前,都不好意思说它是编程语言,它实际上只是一个脚本工具,配套了一堆工具箱。比如Simulink,可以开展非常复杂的仿真,还能编译到实时对象去对接DSP、控制器等硬件。所谓的m语言,实际上是被用在里面作为脚本。

m语言,最初的时候非常简陋;后面慢慢加这加那,看起来也像是一门编程语言,但是它的核心依然是那个Mat-Lab,矩阵实验室。

在我们搞工程计算的人看来,那些花里胡哨的其实都没啥用,还是Fortran老铁实在。所以很多Matalb和M语言中,很多情况都是作为约定的方式存在。这些约定,实际上对于习惯进行矩阵计算来分析问题的工程师而言,是非常有用的。但是对于学习Matlab的新手来说,这些约定可能会让人感到困惑。

在讨论矩阵之前,我们首先讨论向量 v v v

2. 向量的产生

约定1:向量产生默认产生行向量。

比如我们产生一个向量的几个基本方式,直接输入数据。

v = [1; 2; 3; 4; 5];
% size(v) = [5, 1]

这是一个列向量,行向量是这样的:

v = [1, 2, 3, 4, 5];

或者

v = [1 2 3 4 5];

这个时候就有

% size(v) = [1, 5]

对于上面等距分布的向量,我们可以用:来表示。如果用 两个:,中间那个数字就是步长。

v = 1:5;
% or v = 1:1:5;
% size(v) = [1, 5]

还能通过linspace来产生等距分布的向量。

v = linspace(1, 5, 5);
% size(v) = [1, 5]

还能通过logspace来产生对数分布的向量。

v = logspace(1, 5, 5);
% size(v) = [1, 5]
% v = [10 100 1000 10000 100000]

上述几个方法,都是产生行向量:

  1. 输入数据时用空格或者逗号分隔;
  2. :产生等距分布的向量;
  3. linspace产生等距分布的向量;
  4. logspace产生对数分布的向量。

此外,还有一些特殊的向量,比如全0向量,全1向量,随机向量等。这几个函数实际上都是针对矩阵,因此产生都需要指定向量的形状(包括行数和列数)。

v = zeros(5, 1);
% size(v) = [5, 1]
v = ones(5, 1);
% size(v) = [5, 1]

均匀分布的随机向量:

v = rand(5, 1);
% size(v) = [5, 1]

正态分布的随机向量:

v = randn(5, 1);
% size(v) = [5, 1]

为什么呢?为什么这么约定呢?下面就告诉你。

3. 向量与for循环

我没有看到行向量和for循环联系起来的具体文档,我从对for的使用中,发现了这个约定。

v = [1, 2, 3, 4, 5];
for i = vdisp(i);
end
v = [1; 2; 3; 4; 5];
for i = vdisp(i);
end

这两个例子一定要运行一下。很不容易看出差别。

在这里插入图片描述

从这里的例子可以看到,默认的v是行向量,把它放到for的语法结构里面,按照行来遍历,没输出一个数字,就有一个回车空行;而把列向量代入for语法结构,按照列来遍历,直接输出一个列向量。

约定2:for循环遍历列。

4. 向量计算

约定3:向量计算默认利用列向量。

为什么我们说是向量是列向量呢?

我们看下面的例子:

v = [1, 2, 3, 4, 5];
v(:)

这个时候,我们会发现,v(:)是一个列向量。也就是说,对于一个向量,我们可以通过(:)来访问时,总是会得到一个列向量。这对于我们编写代码时,是非常有用的。

比如要计算一个矩阵和一个向量的乘积,我们可以这样:

A = rand(5, 5);
v = rand(1, 5); % 故意产生一个行向量
A * v(:)

这样,我们就不用担心行向量和列向量的问题,得到在数学意义上正确的结果。

另外,比如计算两个向量的内积,我们可以这样:

v1 = rand(5, 1);
v2 = rand(5, 1);
% two hours later, 我们已经忘记了这两个向量的方向
v1(:)' * v2(:)

虽然,写成sum(v1 .* v2)也是可以的,但是这样写,总感觉我们没有更好的从向量的角度来看待计算,不太符合本洁癖的特殊癖好。向量内积,写成矩阵运算:

v 1 T v 2 v_1^T v_2 v1Tv2

这里的两个向量都是列向量。

对于矩阵的运算,为什么一定要默认列向量呢?我觉得这可能和矩阵数学理论有一点点关系。

因为矩阵,从数学的角度来看,是一个线性转换。 A m × n A_{m \times n} Am×n是一个线性转换,它的作用是将一个 n n n维的向量转换为一个 m m m维的向量。

在这个意义上,符合数学的定义,我们应该默认是列向量。这个在函数复合的时候,也很符合直观。

( f ∘ g ) ( x ) ≡ f ( g ( x ) ) ( A ∘ B ) ( v ) ≡ A ∗ ( B ∗ v ) \begin{split} & (f \circ g) (x) \equiv f(g(x)) \\ & (A \circ B) (v) \equiv A * (B * v) \end{split} (fg)(x)f(g(x))(AB)(v)A(Bv)

5. 结论

  1. 向量产生时,默认产生行向量;
  2. 向量计算时,默认利用列向量。
  3. 矩阵和向量,都是按列存储和访问的。

思考题:Matalb中列向量和行向量的内存存储是怎样的?是否有区别?

这篇关于003_vector_conventions_in_MATLA中的向量约定的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/848532

相关文章

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

Vector3 三维向量

Vector3 三维向量 Struct Representation of 3D vectors and points. 表示3D的向量和点。 This structure is used throughout Unity to pass 3D positions and directions around. It also contains functions for doin

模拟实现vector中的常见接口

insert void insert(iterator pos, const T& x){if (_finish == _endofstorage){int n = pos - _start;size_t newcapacity = capacity() == 0 ? 2 : capacity() * 2;reserve(newcapacity);pos = _start + n;//防止迭代

8. 自然语言处理中的深度学习:从词向量到BERT

引言 深度学习在自然语言处理(NLP)领域的应用极大地推动了语言理解和生成技术的发展。通过从词向量到预训练模型(如BERT)的演进,NLP技术在机器翻译、情感分析、问答系统等任务中取得了显著成果。本篇博文将探讨深度学习在NLP中的核心技术,包括词向量、序列模型(如RNN、LSTM),以及BERT等预训练模型的崛起及其实际应用。 1. 词向量的生成与应用 词向量(Word Embedding)

用Python实现时间序列模型实战——Day 14: 向量自回归模型 (VAR) 与向量误差修正模型 (VECM)

一、学习内容 1. 向量自回归模型 (VAR) 的基本概念与应用 向量自回归模型 (VAR) 是多元时间序列分析中的一种模型,用于捕捉多个变量之间的相互依赖关系。与单变量自回归模型不同,VAR 模型将多个时间序列作为向量输入,同时对这些变量进行回归分析。 VAR 模型的一般形式为: 其中: ​ 是时间  的变量向量。 是常数向量。​ 是每个时间滞后的回归系数矩阵。​ 是误差项向量,假

Win32函数调用约定(Calling Convention)

平常我们在C#中使用DllImportAttribute引入函数时,不指明函数调用约定(CallingConvention)这个参数,也可以正常调用。如FindWindow函数 [DllImport("user32.dll", EntryPoint="FindWindow", SetLastError = true)]public static extern IntPtr FindWindow

【全网最全】2024年数学建模国赛A题30页完整建模文档+17页成品论文+保奖matla代码+可视化图表等(后续会更新)

您的点赞收藏是我继续更新的最大动力! 一定要点击如下的卡片,那是获取资料的入口! 【全网最全】2024年数学建模国赛A题30页完整建模文档+17页成品论文+保奖matla代码+可视化图表等(后续会更新)「首先来看看目前已有的资料,还会不断更新哦~一次购买,后续不会再被收费哦,保证是全网最全资源,随着后续内容更新,价格会上涨,越早购买,价格越低,让大家再也不需要到处买断片资料啦~💰💸👋」�

利用向量积(叉积)计算三角形的面积和多边形的面积(hdu2036)

开始撸计算几何题目了。。。。。。。 预备知识:叉乘求多边形面积 参考证明资料: 公式证明: http://www.cnblogs.com/xiexinxinlove/p/3708147.html 高中知识: http://wenku.baidu.com/view/867e6edfad51f01dc281f11a.html #include<stdio.h>#inclu

计算几何之向量旋转

实际做题中我们可能会遇到很多有关及计算几何的问题,其中有一类问题就是向量的旋转问题,下面我们来具体探讨一下有关旋转的问题。 首先我们先把问题简化一下,我们先研究一个点绕另一个点旋转一定角度的问题。已知A点坐标(x1,y1),B点坐标(x2,y2),我们需要求得A点绕着B点旋转θ度后的位置。 A点绕B点旋转θ角度后得到的点,问题是我们要如何才能得到A' 点的坐标。(向逆时针方向旋转角度正,

深度学习速通系列:如何生成句向量?

生成句向量(Sentence Embedding)是自然语言处理(NLP)中的一项重要技术,它将文本句子转换为固定长度的数值向量,这些向量能够捕捉句子的语义信息。以下是一些生成句向量的方法: 词袋模型(Bag of Words, BoW): 将句子中的每个词转换为一个特征向量,并将所有词的特征向量平均或求和,以生成句子的向量表示。 TF-IDF: 使用词频-逆文档频率(Term Freque