用Numpy解释Matlab索引/切片

时间:2018-06-21 20:24:24

标签: python matlab numpy

我正在将一些Matlab代码转换为Python,但发现一行我听不懂:

Y = reshape(X(j+(1:a*b),:),[b,a,p])

我知道reshape函数有一个numpy analog,并且我已经阅读了Matrix Indexing in MATLAB文档,但是我似乎不太理解该行以将其转换为{{1 }}索引/切片。

我尝试了online converter OMPC,但是它使用了functions that are not defined outside of it(例如numpy):

mslice

我也尝试过SMOP converter,但结果也很难理解:

Y = reshape(X(j + (mslice[1:a * b]), mslice[:]), mcat([b, a, p]))

您能解释一下在简单的Matlab中如何转换为Y = reshape(X(j + (arange(1, dot(a, b))), arange()), concat([b, a, p])) 索引/切片规则吗?

2 个答案:

答案 0 :(得分:2)

Y = X[j+np.arange(a*b),:].reshape((b,a,p))

这不知道您到底想要什么,这是matlab行到python的翻译。

请注意,matlab索引从1开始,而numpy的索引从0开始。因此,根据其他几行,内部行可能是np.arange(a*b)np.arange(1,a*b)

您实际上并不需要使用第二个索引X,因此X[1,:]==X[1]True

答案 1 :(得分:1)

在八度会话中:

import re
import sys
import time
with open('4 - raw.txt', 'rb') as content_file:
    content = content_file.read()

newLinePos = [m.start() for m in re.finditer('\n', content)]

for line in newLinePos:
    if (content[line-1]) != '\r':
        print (repr(content[line-20:line]))

print ("end")
time.sleep(1000)

在numpy ipython中:

>> 1:3*3
ans =
   1   2   3   4   5   6   7   8   9