将 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 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何将 spm12 Matlab 代码转换为 python?
如何使用 SMOP 将 Matlab 转换为 Python 代码