只是好奇NumPy功能的结果!

ver*_*crp 2 python matlab numpy

我用NumPy作为硕士论文.我已经从MATLAB代码中转换了部分代码,但是当我引用时,我对NumPy/Python有疑问:

m = numpy.ones((10,2))
m[:,0]
Run Code Online (Sandbox Code Playgroud)

返回:

array([ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.])
Run Code Online (Sandbox Code Playgroud)

当我参考:

m[:,0:1]
Run Code Online (Sandbox Code Playgroud)

它返回:

array([[ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.]])
Run Code Online (Sandbox Code Playgroud)

我认为它应该是,与MATLAB相同的结果!

rob*_*nce 5

这是因为numpy具有Matlab没有的1d数组的概念.与numpys 广播相结合,这提供了一个强大的简化(更少担心在任何地方插入转置)但是确实意味着你必须考虑从Matlab进行翻译.在这种情况下,使用标量Numpy提取单个列会将结果简化为1d数组 - 但是使用切片它会保留原始尺寸.如果你想更接近Matlab语义,你可以尝试使用Matrix类.有关详细信息,请参阅matlab用户页面的NumPy.在这种情况下,您可以执行以下任一操作:

m[:,0][:,newaxis] # gives same as matlab
np.matrix(m)[:,0] # gives same as matlab
Run Code Online (Sandbox Code Playgroud)

但请记住,如果你使用矩阵类*成为矩阵乘法,你需要使用multiply()元素.(这些都在NumPy for Matlab Users页面中介绍).一般来说,我建议尝试习惯使用1d数组,你可以在matlab中使用列或行向量,一般情况下工作正常.在将它们重新组装成2d数组时,您只需要担心列与行.

您可能对自动matlab到python转换器感兴趣,例如OMPC (纸张)(我认为还有其他的).

  • 没问题......如果你觉得这回答了问题你可以点击答案上的勾选接受它...... :) (2认同)