matlab for循环 改写成 矩阵算法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab for循环 改写成 矩阵算法相关的知识,希望对你有一定的参考价值。
有点麻烦。。我举个简单例子吧把X*M*Y展开成一个多项式,比如2+r^2+r.*l+l.^2;
然后代码如下:
[m,
n]
=
size(R);Rc
=
R(:);
Lc
=
L(:);Resultc
=
2+Rc.^2+Rc.*Lc+Lc.^2;Result
=
reshape(Resultc,
[m
n]);但是,实际上的式子远比2+r^2+r.*l+l.^2这样复杂,所以这一行会写很长。。。 参考技术A 你所说的可能是指matlab的向量化运算(vectorization)吧?
matlab顾名思义,本来就是为向量或矩阵运算设计的,所以很多场合,如果能够使用向量化运算,就应尽量避免使用显式循环(for和while)。这一点是和普通的高级编程语言如c++、fortran有显著差别的。
举一个简单的例子:生成一个对数表,如果使用循环
x
=
.01;
for
k
=
1:1001
y(k)
=
log10(x);
x
=
x
+
.01;
end
而在matlab中可以用这种向量化的代码:
x
=
.01:.01:10;
y
=
log10(x);
二者的差别不仅在于代码量的大小,效率差别也很大。
这方面也没什么特殊的资料,属于比较基础的,如果想用好matlab,就请多花点时间把基本功练扎实点(事实上很多人并没做到)。特别提醒一下,很多时候注意使用matlab的“点运算操作符”,如.*,
./,
.^等。想进一步了解这方面的内容,可以在matlab帮助系统里搜索一下vectorization,有一些相关的主题和例子。
尝试在 Python 的 for 循环中调用矩阵的元素
【中文标题】尝试在 Python 的 for 循环中调用矩阵的元素【英文标题】:Trying to call elements of a matrix within a for loop in Python 【发布时间】:2022-01-23 07:18:05 【问题描述】:我正在为我之前加入的一个天体动力学研究小组将代码从 Matlab 转换为 Python。我正在尝试使用牛顿法来解决需要迭代过程的轨道的偏心异常。
我在 for 循环之外创建了矩阵 M
,并希望在 for 循环中索引该矩阵。
示例:(这就是我在 Matlab 中编写它的方式,我正在寻找如何在 Python 中执行此操作,特别是调用 M
的元素,这些元素与 for 循环正在运行的 i
值的位置一致.)
M = [1, 2, 3, 4] (where M(1) = 1 and M(3) = 3 and so on)
for i = 1:4
E(i) = 2 - M(i)
end
Result: E = [1, 0, -1, -2]
如果有任何建议,我将不胜感激。
谢谢!
【问题讨论】:
我认为您需要先学习如何在 MATLAB 中很好地编写代码,然后再深入了解另一种难以理解的语言。 SO 不是一个教程网站,您显然需要一个介绍性教程。 【参考方案1】:我不完全确定我理解你的问题,但这就是你要找的吗?
E = [2 - i for i in range(1, 5)]
# [1, 0, -1, -2]
所以,如果你有一个可迭代的“矩阵”M
,这就是解决方案
M = [1, 2, 3, 4]
E = [2 - i for i in M]
# [1, 0, -1, -2]
【讨论】:
python中与MATLAB大致相当的有numpy和scipy。【参考方案2】:“直接翻译”成 Python 是:
M = [1, 2, 3, 4]
E = [0, 0, 0, 0]
for i in range(4): ##from 0 to 3
E[i] = 2 - M[i]
print(E)
请注意,Python 中的第一个索引始终为 0 我保留了 for 循环,因为它可能更容易理解。
【讨论】:
以上是关于matlab for循环 改写成 矩阵算法的主要内容,如果未能解决你的问题,请参考以下文章