简短回答:

MATLAB中的'算子是矩阵(共轭)转置算子。它使矩阵在维度上翻转,并得到矩阵的复共轭(第二部分是使人困惑的部分),简单的回答是,在Python中,a'的等价物是np.atleast_2d(a).T.conj()。在

稍长回答:

不要在MATLAB中使用',除非你真的知道自己在做什么。使用.',这是普通的转置。它相当于Python中的np.atleast_2d(a).T(无共轭)。如果您确定python中的a.ndim >= 2,那么您就可以使用a.T。如果您确定在Python中a.ndim == 1,那么可以使用a[None].T。如果您确定在Python中a.ndim == 0,那么转置是没有意义的,所以只需做任何您想做的事情。在

很长的答案:

转置的基本思想是将数组或矩阵翻转一个维度,因此请考虑以下内容:>> a=[1,2,3,4,5,6]

a =

1 2 3 4 5 6

>> a'

ans =

1

2

3

4

5

6

>> b=[1,2,3;4,5,6]

b =

1 2 3

4 5 6

>> b'

ans =

1 4

2 5

3 6

所以看起来很清楚,'做了一个转置。但这是欺骗:

^{pr2}$

那些底片是从哪里来的?他们不在原来的阵型里。原因在documentation中描述。MATLAB中的'算子不是正规转置算子,正规转置算子是.'。'运算符执行一个复共轭转置。它对矩阵进行转置,并对矩阵进行复共轭。在

问题是,这几乎永远不是你真正想要的。例如,这将导致代码看起来像预期的那样工作,但会悄悄地更改您的FFT数据。因此,除非您绝对肯定您的算法需要复杂的共轭转置,否则请使用.'。在

对于Python,Python转置操作符是.T。所以你认为:>>> a = np.array([[1, 2, 3, 4, 5, 6]])

>>> print(a)

[[1 2 3 4 5 6]]

>>> print(a.T)

[[1]

[2]

[3]

[4]

[5]

[6]]

>>> b = np.array([[1j, 2j, 3j, 4j, 5j, 6j]])

[[ 0.+1.j 0.+2.j 0.+3.j 0.+4.j 0.+5.j 0.+6.j]]

>>> (1j*np.ones((1,10))).T

[[ 0.+1.j]

[ 0.+2.j]

[ 0.+3.j]

[ 0.+4.j]

[ 0.+5.j]

[ 0.+6.j]]

注意想象部分没有任何否定。如果你想得到复共轭转置,你需要使用np.conj(a)或{}来获得复共轭(在转置之前或之后)。然而,numpy有自己的转置陷阱:>>> c = np.array([1, 2, 3, 4, 5, 6])

>>> print(c)

[1 2 3 4 5 6]

>>> print(c.T)

[1 2 3 4 5 6]

嗯?它什么也没做。原因是np.array([1, 2, 3, 4, 5, 6])创建了一个1D数组。转置是沿着特定的维度翻转数组。当只有一个维度时,这是没有意义的,所以转置什么都不做。在

“但是,”你可能会反对,“1D MATLAB矩阵的转置难道不起作用吗?”原因更为根本的原因是MATLAB和numpy如何存储数据。以Python为例:>>> np.array([[1, 2, 3], [4, 5, 6]]).ndim

2

>>> np.array([1, 2, 3, 4, 5, 6]).ndim

1

>>> np.array(1).ndim

0

这似乎是合理的。二维数组有二维,一维数组有一维,标量有零维。但在MATLAB中尝试同样的方法:>> ndims([1,2,3;4,5,6])

ans =

2

>> ndims([1,2,3,4,5,6])

ans =

2

>> ndims(1)

ans =

2

一切都有两个维度!MATLAB没有1D或0D数据结构,MATLAB中的所有东西都必须至少有2维(尽管可以在MATLAB中创建自己有效的1D或0D类)。所以在MATLAB中对你的“1D”数据结构进行转置是有效的,因为它实际上不是1D

共轭转置和1D转置问题都归结为基本数据类型MATLB和numpy的使用。MATLAB使用矩阵,矩阵本质上至少是2D,而nump则使用数组,数组可以有任意数量的维。MATLAB矩阵使用矩阵数学作为它们的正规运算(所以MATLAB中的a * b是一个矩阵乘积),而Python数组则使用逐元素数学作为它们的正规运算符(因此a * b是一个逐元素的乘积,相当于MATLAB中的a .* b)。MATLAB有逐元素运算符,numpy数组有矩阵运算符(虽然还没有矩阵转置,但正在考虑添加一个),因此这主要适用于默认操作。在

为了在Python中避免这个问题,有几种方法可以绕过它。在Python中使用None索引插入广告传统尺寸。所以对于一维数组a,a[None]将是一个二维数组,其中第一维的长度为1。如果事先不知道数组的维数是多少,可以使用np.atleast_2d(a),这将确保a至少有两个维度。所以0D变成2D,1D变成2D,2D保持2D,3D保持3D,4D保持4D,等等

也就是说,numpy有一个matrix类,在所有这些方面都与MATLAB的一样(它甚至有一个共轭转置运算符.H)。不要使用它。python社区已经围绕数组进行了标准化,因为实际上这几乎总是您想要的。这意味着大多数Python工具都需要数组,如果给定了矩阵,许多工具就会出现故障,或者将它们转换为数组。所以只需使用数组。在

matlab双引号作用,matlab中单引号(')的含义是什么,以及如何将其改为python相关推荐

  1. ora-01740: 标识符中缺失双引号_sql语句中单引号的使用

    1.反引号用于表和列标识符,但仅在标识符是MySQL保留关键字时,或者当标识符包含空格字符或超出有限集的字符时才需要.通常建议避免使用保留关键字尽可能作为列或表标识符,避免引用问题. 单引号应该用于V ...

  2. python单双三引号区别_python中单引号,双引号,多引号区别_python中单双引号

    python中单引号,双引号,多引号区别 先说1双引号与3个双引号的区别,双引号所表示的字符串通常要写成一行 如: s1 = "hello,world" 如果要写成多行,那么就要使 ...

  3. html中单引号表示,HTML中单引号的妙用

    之前在做在很理应于是会商器则,,是各近或多,用维网页开发时,被以下这一个微不足道的小问题把头搞大了,具体问题已经做了处理,现把问题所在整理如下在重说道.础过学开概码数项遍间里哦行览屏屏定处..容标中钮 ...

  4. matlab数学建模作用,matlab数学建模基础

    1.数据的导入和保存 1.1数据的导入 matlab中导入数据的函数通常为load load matlab.mat matlab中常用的导入数据的函数为importdata,用法如下: importe ...

  5. shell mysql中单引号_Shell脚本中单引号(‘)和双引号(“)的使用区别

    在Linux操作系统上编写Shell脚本时候,我们是在变量的前面使用$符号来获取该变量的值,通常在脚本中使用"$param"这种带双引号的格式,但也有出现使用'$param'这种带 ...

  6. mysql sql语句 引号_sql语句中单引号,双引号的处理方法

    关于Insert字符串 很多同学都在(单引号,双引号)这个方面发生了问题,其实主要是因为数据类型和变量在作怪. 下面我们就分别讲述,虽然说的是Insert语句, 但是Select.Update.Del ...

  7. matlab里subsystem作用,matlab中的subsystem是什么,怎么建立?

    是MATLAB子系统!请点击以下地址查看 http://www.91xiu.com/edu/f/2008/12/29/4289.shtmlMatlab 子系统的创建.装帧及受控执行 2008-10-2 ...

  8. oracle 切割字符串加引号_oracle存储过程中单引号及字符串拼接处理

    在ORACLE中,单引号有两个作用,一是字符串是由单引号引用,二是转义.单引号的使用是就近配对,即就近原则.而在单引号充当转义角色时相对不好理解 1.从第二个单引号开始被视为转义符,如果第二个单引号后 ...

  9. matlab 双馈,基于Matlab的双馈调速系统研究

    1.双馈调速系统的构成[1]本文引用地址:http://www.eepw.com.cn/article/163904.htm 对于绕线式异步电机,定子接有固定频率(50Hz)的工业电源,转子侧接有频率 ...

最新文章

  1. socket connect阻塞和非阻塞处理
  2. iphone退款申请教程_王者荣耀账号注销退钱吗?王者荣耀账号注销100%退款教程...
  3. b树删除节点每次只能删一个吗_面试官,请不要问我B+树了!!
  4. 奥密克戎新毒株XE出现!传播速度快10%
  5. React-Context
  6. 计算机视觉与深度学习,看这本书就够了
  7. Java基础:类加载器
  8. ES6公用跑马灯抽奖组件的封装及使用
  9. 为什么链接不上mysql数据库_java链接不上数据库,怎么解决!
  10. Java面向对象——基础2 封装、继承、多态
  11. 【codevs2098】【Tyvj1625】化工厂装箱员,煞笔的人打煞笔的DP
  12. ROS入门-16.tf坐标系广播与监听的编程实现
  13. 面试常备题(三)----顺时针打印矩阵
  14. linux-0.11 内核源码学习笔记一(嵌入式汇编语法及使用)
  15. ECMAScript5 [].reduce()
  16. python时间处理方法_基于python时间处理方法(详解)
  17. 一键解决局域网共享之批处理
  18. 安徽大学高等数学习题册(上)(第一章)
  19. 在家搭建 Minecraft 服务器,和远程小伙伴一起联机
  20. POI DataValidation 删除数据有效性验证

热门文章

  1. 导带,价带,禁带,允带的逻辑关系
  2. 超文本标记语言(HyperText Markup Language,简称HTML)
  3. opengl glm库 改变mvp矩阵 实现3D漫游
  4. 在Java中玩转时间
  5. 用c写按键精灵脚本语言,按键精灵论坛发脚本的格式自动编排脚本源码
  6. pic关于头文件的进一步理解(基于PIC单片机 C18编译器)
  7. Android操作系统的发展史
  8. iframe.contentWindow 介绍
  9. 打造演艺清吧音响的首选品牌-PHASOUND
  10. 使用gcc以及makefile编译C程序