将 MATLAB 代码转换为 Python [关闭]

Posted

技术标签:

【中文标题】将 MATLAB 代码转换为 Python [关闭]【英文标题】:Turn MATLAB code into Python [closed] 【发布时间】:2018-05-13 04:46:08 【问题描述】:

我是 Python 的新手,所以我在 Python 中的矢量化操作和索引方面遇到了麻烦。我完全理解如何通过逐元素计算以 C 风格重写它,但它不会像 MATLAB 代码那样是“pythonic”和简洁的。我希望它简短而简洁。我需要将下一个代码从 MATLAB 翻译成 Python:

for t=2:size(cl, 1)
    hasData=find(isfinite(retGap(t, :)) & op(t, :) < buyPrice(t, :) & op(t, :) > ma(t, :));
    [foo idxSort]=sort(retGap(t, hasData), 'ascend');
    positionTable(t, hasData(idxSort(1:min(topN, length(idxSort)))))=1;
end

所有数组都是 1500x497 浮点数。我可以这样翻译第一行:

posCl = cl.iloc[t]
posOp = op.iloc[t]
posBp = buyPrice.iloc[t]
posMa = ma.iloc[t]
posRg = retGap.iloc[t]
posRg[pd.notnull(posRg) & (posOp < posBp) & (posOp > posMa)]

但我不知道如何用简洁的方式翻译这些行。

【问题讨论】:

第 1 步:学习 Python。第 2 步:编写 Python 代码。或者,聘请程序员,这不是代码转换服务。 【参考方案1】:

我已经解决了这个问题!

for t in range(len(cl)):
idx = retGap.iloc[t][pd.notnull(retGap.iloc[t]) & \
                 (op.iloc[t] < buyPrice.iloc[t]) & \
                 (op.iloc[t] > ma.iloc[t])].sort_values()[:10].index
positionsTable.iloc[t][idx] = 1

【讨论】:

【参考方案2】: Python 是零索引

MATLAB 是 1-indexed

MATLAB 切片表示法包括端点

Python 切片表示法不包括端点

MATLAB start:step:stop

Python 开始:停止:步骤

有用的链接: - http://mathesaurus.sourceforge.net/matlab-numpy.html - http://www.matlabtricks.com/post-23/tutorial-on-matrix-indexing-in-matlab

【讨论】:

谢谢你,但你写的对我来说是显而易见的。我对那个代码有问题。我完全理解如何通过逐元素计算以 C 风格重写它,但它不会像 MATLAB 代码那样是“pythonic”和简洁的。我希望它简短而简洁。

以上是关于将 MATLAB 代码转换为 Python [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

将matlab代码转换为python

如何将 spm12 Matlab 代码转换为 python?

将 Matlab 转换为 Python

如何使用 SMOP 将 Matlab 转换为 Python 代码

将 Python 代码转换为 Android 的 apk? [关闭]

将python Dataframe转换为Matlab文件