只是好奇NumPy函数的结果!

2024-09-29 02:28:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我的硕士论文用过NumPy。我已经从MATLAB代码中转换了部分代码,但我在引用NumPy/Python时有疑问:

m = numpy.ones((10,2))
m[:,0]

返回:

^{pr2}$

当我提到:

m[:,0:1]

它返回:

array([[ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.]])

我认为它应该是,因为同样的结果与MATLAB!!!在


Tags: 代码numpyonesarraymatlab硕士论文pr2
3条回答

这是因为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

但请记住,如果您使用矩阵类*变成矩阵乘法,您需要使用multiply()来表示元素。(这在numpyformatlab用户页面中都有介绍)。一般来说,我建议你试着习惯使用1d数组,你可以在matlab中使用列或行向量,一般情况下一切都可以。在将列与行重新组合到二维数组中时,只需担心列与行的关系。在

您可能对自动化的matlab到python转换器感兴趣,比如OMPC(paper)(我认为还有其他的)。在

我自己仍在学习Python,但我认为切片的工作方式是索引指向两个位置之间,因此0:1只能得到第一列。这就是你问的问题吗?在

这是documentation要说的:

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是怎么做的,但是Matlab索引的向量是1,而不是0。所以数组(:,0)在Matlab中是一个错误。在

相关问题 更多 >