将MATLAB代码转换为Python

时间:2017-11-29 12:55:05

标签: python matlab sorting indexing

我是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)]

但我不知道如何以简洁的方式翻译线条。

2 个答案:

答案 0 :(得分:4)

  • Python为零索引
  • MATLAB是1索引的

  • MATLAB切片表示法包括端点

  • Python切片表示法排除了端点

  • MATLAB开始:步骤:停止

  • Python start:stop:step

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

答案 1 :(得分:0)

我已经解决了这个问题!

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