从MATLAB到Python的数学函数转换

2024-09-28 03:18:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在做一个项目,这个项目涉及到将一个在MATLAB中运行的程序翻译成Python,以提高速度和效率。然而,我遇到了一个绊脚石。首先,我搞不清在MATLAB中波浪号(~)表示什么,以及如何在python中以相应的方式表示它。第二,我一直在搜索文档,我也很难在MATLAB中找到一个与“sign”函数等价的函数。在

    indi = ~abs(indexd);
    wav = (sum(sum(wv)))/(length(wv)*(length(wv)-1));
    thetau = (sign(sign(wv - wav) - 0.1) + 1)/2;
    thetad = (sign(sign(wav - wv) - 0.1) + 1)/2;

我已经将indexd和wv从前面的代码部分转换为numpy数组。替换~和符号函数的最有效的python方法是什么?在


Tags: 项目函数文档程序方式length速度效率
1条回答
网友
1楼 · 发布于 2024-09-28 03:18:49

如果您使用numpy,那么您还可以使用~来反转类似MATLAB的东西。请参见:What does the unary operator ~ do in numpy?sign函数也存在于numpy中。您使用^{}。因此,上面的代码只是:

>>> import numpy as np
>>> indi = ~np.abs(indexd)
>>> wav = (np.sum(wv))/(len(wv)*(len(wv)-1))
>>> thetau = (np.sign(np.sign(wv - wav) - 0.1) + 1)/2
>>> thetad = (np.sign(np.sign(wav - wv) - 0.1) + 1)/2

注意,在MATLAB中使用length可以在矩阵中找到最大的维数,而numpy则使用len来给出矩阵中的总行数。假设wv中的行数大于或等于wv中的列数,那么上面的代码将如您所期望的那样工作。但是,如果列多于行,则需要找到维度的最大值并使用该值。。。所以:

^{pr2}$

默认情况下,上面对^{}的调用实际上对所有维度求和,因此不需要调用嵌套的sum调用来对整个矩阵求和(感谢Divakar!)。在

完全推荐您到这里来看看从MATLAB翻译到numpy:http://wiki.scipy.org/NumPy_for_Matlab_Users的很棒的表格和指南

相关问题 更多 >

    热门问题