这是因为numpy有1d数组的概念,而Matlab没有这个概念。再加上numpysbroadcasting,这提供了一个强大的简化(不必担心到处插入转置),但这意味着您必须考虑一下从Matlab进行翻译。在本例中,使用标量Numpy提取一个列可以将结果简化为1d数组,但是对于切片,它保留了原始维度。如果你想更接近Matlab的语义,你可以尝试使用Matrix类。有关详细信息,请参见NumPy for matlab users页。在这种情况下,您可以执行以下任一操作:
m[:,0][:,newaxis] # gives same as matlab
np.matrix(m)[:,0] # gives same as matlab
One way to remember how slices work is
to think of the indices as pointing
between characters, with the left edge
of the first character numbered 0.
Then the right edge of the last
character of a string of n characters
has index n, for example:
+ -+ -+ -+ -+ -+
| H | e | l | p | A |
+ -+ -+ -+ -+ -+
0 1 2 3 4 5
-5 -4 -3 -2 -1
这是因为numpy有1d数组的概念,而Matlab没有这个概念。再加上numpysbroadcasting,这提供了一个强大的简化(不必担心到处插入转置),但这意味着您必须考虑一下从Matlab进行翻译。在本例中,使用标量Numpy提取一个列可以将结果简化为1d数组,但是对于切片,它保留了原始维度。如果你想更接近Matlab的语义,你可以尝试使用Matrix类。有关详细信息,请参见NumPy for matlab users页。在这种情况下,您可以执行以下任一操作:
但请记住,如果您使用矩阵类
*
变成矩阵乘法,您需要使用multiply()
来表示元素。(这在numpyformatlab用户页面中都有介绍)。一般来说,我建议你试着习惯使用1d数组,你可以在matlab中使用列或行向量,一般情况下一切都可以。在将列与行重新组合到二维数组中时,只需担心列与行的关系。在您可能对自动化的matlab到python转换器感兴趣,比如OMPC(paper)(我认为还有其他的)。在
我自己仍在学习Python,但我认为切片的工作方式是索引指向两个位置之间,因此
0:1
只能得到第一列。这就是你问的问题吗?在这是documentation要说的:
我忘了numpy是怎么做的,但是Matlab索引的向量是1,而不是0。所以数组(:,0)在Matlab中是一个错误。在
相关问题 更多 >
编程相关推荐