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循环 改写成 矩阵算法的主要内容,如果未能解决你的问题,请参考以下文章

matlab用for循环求矩阵乘法

matlab中矩阵怎么在for循环中用

MATLAB中如何用for 循环将结果代入矩阵中?

matlab 二维矩阵for循环逐行赋值

matlab怎样通过for循环语句找出两矩阵相同的行和列?

如何在matlab中保存通过for循环生成的数据?