Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit ea5d4e0

Browse files
committed
更新至最新Numpy版本
1 parent b31069c commit ea5d4e0

File tree

1 file changed

+22
-37
lines changed

1 file changed

+22
-37
lines changed

‎5.NumPy-for-Matlab-users/NumPy_for_Matlab_users.md‎

Lines changed: 22 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,10 @@
66
- ["array" 还是 "matrix"? 我应该选谁?](#array-还是-matrix-我应该选谁)
77
- [简要的回答](#简要的回答)
88
- [详细的回答](#详细的回答)
9-
- [使用Matrix的用户的福音](#使用matrix的用户的福音)
109
- [MATLAB和NumPy粗略的功能对应表](#matlab和numpy粗略的功能对应表)
1110
- [一般功能的对应表](#一般功能的对应表)
1211
- [线性代数功能对应表](#线性代数功能对应表)
13-
- [备注](#备注)
12+
- [注释](#注释)
1413
- [自定义环境](#自定义环境)
1514
- [链接](#链接)
1615

@@ -95,25 +94,11 @@ NumPy包含`array`类和`Matrix`类。`array`类旨在成为用于多种数值
9594

9695
因此,使用数组要明智得多。事实上,我们打算最终弃用矩阵类型。
9796

98-
## 使用Matrix的用户的福音
99-
100-
NumPy有一些特性,可以方便地使用``matrix``类型,这有望使Matlab的用户转化过来更为容易。
101-
102-
- 新增了一个``matlib``模块,该模块包含常用数组构造函数的矩阵版本,如one()、zeros()、empty()、view()、rand()、repmat()等。通常,这些函数返回数组,但matlib版本返回矩阵对象。
103-
- ``mat`` 已被更改为``asmatrix``的同义词,而不是矩阵,从而使其成为将数组转换为矩阵而不复制数据的简洁方法。
104-
- 一些顶级的函数已被删除。例如,``numpy.rand()``现在需要作为``numpy.random.rand()``访问。或者使用``matlib``模块中的``rand()``。但是"numpythonic"方式是使用``numpy.random.random()``,它为元组数据类型作为shape(形状),就像其他numpy函数一样。
10597

10698
## MATLAB和NumPy粗略的功能对应表
10799

108-
下表粗略的反应了一些常见MATLAB表达式的大致对应关系。**但这些并不完全等同**,而是作为一种指引,指引读者一个正确的反向。有关更多详细信息,请参阅NumPy函数的内置文档。
109-
110-
在编写以数组或矩阵作为参数的函数时,需要注意一点,就算如果你期望函数返回一个 ``array``, 传入的参数却是一个 ``matrix``,或反之亦然,那么 ``*`` (乘法运算符) 会给你带来意想不到的惊喜。它可以在数组和矩阵之间来回转换。
111-
112-
- ``asarray``: 总是返回一个 ``array`` 类型的对象。
113-
- ``asmatrix````mat``: 总是返回一个 ``matrix`` 类型的对象。
114-
- ``asanyarray``: 始终返回数组对象或数组对象派生的子类,具体取决于传入的类型。例如,如果传入一个``matrix``,它将返回一个``matrix``
100+
下表粗略的反应了一些常见MATLAB表达式的大致对应关系。这些并不是完全等价的,而是应该作为提示来引导您走向正确的方向。有关更多详细信息,请参阅NumPy函数的内置文档。
115101

116-
这些函数都接受数组和矩阵(除了别的类型哈,比如Python的list类型之类的),因此在编写应该接受任何类似数组的对象的函数时很有用。
117102

118103
在下表中,假设你已经在Python中执行了以下命令:
119104

@@ -122,21 +107,21 @@ from numpy import *
122107
import scipy.linalg
123108
```
124109

125-
另外如果下表中的``注释``这一列的内容是和``matrix``有关的话,那么参数一定是二维的形式。
110+
另外如果下表中的`注释`这一列的内容是和`matrix`有关的话,那么参数一定是二维的形式。
126111

127112
### 一般功能的对应表
128113

129114
MATLAB | NumPy | 注释
130115
---|---|---
131-
``help func`` | ``info(func)````help(func)````func?`` (在 Ipython 中) | 获得函数func的帮助。
132-
``which func`` | see note HELP(译者注:在里的原链接已经失效。) | 找出func定义的位置。
133-
``type func`` | ``source(func)````func??`` (在 Ipython 中) | 打印func的源代码(如果不是原生函数的话)。
134-
``a && b`` | ``a and b`` | 短路逻辑 AND 运算符 (Python 原生运算符); 仅限标量参数。
135-
``a \|\| b`` | ``a or b`` | 短路逻辑 OR 运算符 (Python 原生运算符); 仅限标量参数。
136-
``1*i, 1*j, 1i, 1j`` | ``1j`` | 复数。
137-
``eps`` | ``np.spacing(1)`` | 数字1和最近的浮点数之间的距离。
138-
``ode45`` | ``scipy.integrate.solve_ivp(f)`` | 将ODE与Runge-Kutta 4,5整合在一起。
139-
``ode15s`` | ``scipy.integrate.solve_ivp(f, method='BDF')`` | 用BDF方法整合ODE。
116+
help func | info(func) 或 help(func) 或 func? (在 Ipython 中) | 获得函数func的帮助。
117+
which func | see note HELP(译者注:在里的原链接已经失效。) | 找出func定义的位置。
118+
type func | source(func) 或 func?? (在 Ipython 中) | 打印func的源代码(如果不是原生函数的话)。
119+
a && b | a and b | 短路逻辑 AND 运算符 (Python 原生运算符); 仅限标量参数。
120+
a \|\| b | a or b | 短路逻辑 OR 运算符 (Python 原生运算符); 仅限标量参数。
121+
1\*i, 1\*j, 1i, 1j | 1j | 复数。
122+
eps | np.spacing(1) | 数字1和最近的浮点数之间的距离。
123+
ode45 | scipy.integrate.solve_ivp(f) | 将ODE与Runge-Kutta 4,5整合在一起。
124+
ode15s | scipy.integrate.solve_ivp(f, method='BDF') | 用BDF方法整合ODE。
140125

141126
### 线性代数功能对应表
142127

@@ -175,8 +160,8 @@ a(:) = 3 | a[:] = 3 | 将所有值设置为相同的标量值
175160
y=x | y = x.copy() | numpy 通过拷贝引用来赋值。
176161
y=x(2,:) | y = x[1,:].copy() | numpy 通过拷贝引用来切片操作。
177162
y=x(:) | y = x.flatten() | 将数组转换为向量(请注意,这将强制拷贝)。
178-
1:10 | arange(1.,11.) 或 r_[1.:11.] 或 r_[1:10:10j] | 创建一个可增长的向量 (参见下面的[注释](#note)章节)
179-
0:9 | arange(10.) 或 r_[:10.] 或 r_[:9:10j] | 创建一个可增长的向量 (参见下面的[注释](#note)章节)
163+
1:10 | arange(1.,11.) 或 r_[1.:11.] 或 r_[1:10:10j] | 创建一个可增长的向量 (参见下面的[备注](#备注)章节)
164+
0:9 | arange(10.) 或 r_[:10.] 或 r_[:9:10j] | 创建一个可增长的向量 (参见下面的[备注](#备注)章节)
180165
[1:10]' | arange(1.,11.)[:, newaxis] | 创建一个列向量。
181166
zeros(3,4) | zeros((3,4)) | 创建一个全是0的填充的 3x4 的64位浮点类型的二维数组。
182167
zeros(3,4,5) | zeros((3,4,5)) | 创建一个全是0的填充的 3x4x5 的64位浮点类型的三维数组。
@@ -208,7 +193,7 @@ rank(a) | linalg.matrix_rank(a) | 二维数组或者矩阵的矩阵rank。
208193
a\b | 如果a是方形矩阵 linalg.solve(a,b) ,否则:linalg.lstsq(a,b) | 对于x,x = b的解
209194
b/a | Solve a.T x.T = b.T instead | 对于x,x a = b的解
210195
[U,S,V]=svd(a) | U, S, Vh = linalg.svd(a), V = Vh.T | a数组的奇值分解
211-
chol(a) | linalg.cholesky(a).T | 矩阵的cholesky分解(matlab中的``chol(a)``返回一个上三角矩阵,``linalg.cholesky(a)``返回一个下三角矩阵)
196+
chol(a) | linalg.cholesky(a).T | 矩阵的cholesky分解(matlab中的chol(a)返回一个上三角矩阵,但linalg.cholesky(a)返回一个下三角矩阵)
212197
[V,D]=eig(a) | D,V = linalg.eig(a) | a数组的特征值和特征向量
213198
[V,D]=eig(a,b) | V,D = np.linalg.eig(a,b) | a,b数组的特征值和特征向量
214199
[V,D]=eigs(a,k) | - | 找到a的k个最大特征值和特征向量
@@ -221,18 +206,18 @@ sort(a) | sort(a) or a.sort() | 对矩阵或者数组进行排序
221206
[b,I] = sortrows(a,i) | I = argsort(a[:,i]), b=a[I,:] | 对矩阵或数组的行进行排序
222207
regress(y,X) | linalg.lstsq(X,y) | 多线性回归
223208
decimate(x, q) | scipy.signal.resample(x, len(x)/q) | 采用低通滤波的下采样
224-
``unique(a)`` | ``unique(a)`` | -
225-
``squeeze(a)`` | ``a.squeeze()`` | -
209+
unique(a) | unique(a) | -
210+
squeeze(a) | a.squeeze() | -
226211

227-
## 备注
212+
## 注释
228213

229-
**子矩阵**: 可以使用ix_命令使用索引列表完成对子矩阵的分配。例如,对于2d阵列a,有人可能会这样做: ``ind=[1,3]; a[np.ix_(ind,ind)]+=100``.
214+
**子矩阵**: 可以使用ix_命令使用索引列表完成对子矩阵的分配。例如,对于2d阵列a,有人可能会这样做: `ind=[1,3]; a[np.ix_(ind,ind)]+=100`.
230215

231-
**帮助方面**: 没有直接等同于MATLAB的``which``的命令,但是命令``help````source``通常会列出函数所在的文件名。Python还提供了一个检查模块(do ``import inspect``),该模块提供了一个经常被使用到的`getfile``方法。
216+
**帮助方面**: 没有直接等同于MATLAB的`which`的命令,但是命令`help``source`通常会列出函数所在的文件名。Python还提供了一个检查模块(do `import inspect`),该模块提供了一个经常被使用到的`getfile``方法。
232217

233218
**索引方面**: MATLAB® 使用基于1的索引,因此序列的初始元素具有索引1。Python使用基于0的索引,因此数组的初始元素的索引为0。之所以有如此天壤之别,是因为它们各有优缺点。使用基于1的索引是和常见的人类语言用法是一致的,前者是序列的 "第一个" 元素的索引是1。而后者基于0的索引简化了索引。另见pro.dr的文本。
234219

235-
**范围**: 在 MATLAB® 中,0:5既可以用作范围文字索引,也可以用作"片"索引(括号内);然而,在Python中,像0:5这样的结构只能用作片索引(方括号内)。因此,创建了有点奇怪的r_Object,以允许numpy具有类似的简洁范围构造机制。请注意,r_不像函数或构造函数那样被调用,而是使用方括号进行索引,这允许在参数中使用Python的切片语法。
220+
**范围**: 在 MATLAB® 中,`0:5`既可以用作范围文字索引,也可以用作"片"索引(括号内);然而,在Python中,`0:5`这样的结构只能用作片索引(方括号内)。因此,创建了有点奇怪的`r_`对象,以允许numpy具有类似的简洁范围构造机制。请注意,`r_`不像函数或构造函数那样被调用,而是使用方括号进行索引,这允许在参数中使用Python的切片语法。
236221

237222
**逻辑运算**: & 或者 | 在NumPy中是按位的 AND/OR,而在Matlab中 & 和 | 是逻辑 AND/OR。对于任何有丰富编程经验的人来说,这一区别应该是显而易见的。这两种方法表面上看起来是一样的,但也有重要的区别。如果你要使用Matlab的& 或 | 操作符,则应该使用NumPy函数的logicaland/logicalor。Matlab 的运算符 与 NumPy 的 & 和 | 运算符的显著区别是:
238223

@@ -248,7 +233,7 @@ decimate(x, q) | scipy.signal.resample(x, len(x)/q) | 采用低通滤波的下
248233

249234
NumPy,或者更确切地说是Python,具有类似的功能。
250235

251-
- 要修改Python搜索路径以包含自己模块的位置,请定义``PYTHONPATH``的环境变量。
236+
- 要修改Python搜索路径以包含自己模块的位置,请定义`PYTHONPATH`的环境变量。
252237
- 要在启动交互式Python解释器时执行特定的脚本文件,请定义"PYTHONSTARTUP"环境变量以包含启动脚本的名称。
253238

254239
与MATLAB®不同,可以立即调用路径上的任何内容,使用Python,你需要先执行"import"语句,以使特定文件中的函数可访问。

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /