我在硕士论文中使用了 NumPy。我已经从 MATLAB 代码转换了部分代码,但我在引用时对 NumPy/Python 有疑问:
m = numpy.ones((10,2))
m[:,0]
返回:
array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
当我提到:
m[:,0:1]
它返回:
array([[ 1.],
[ 1.],
[ 1.],
[ 1.],
[ 1.],
[ 1.],
[ 1.],
[ 1.],
[ 1.],
[ 1.]])
我认为它应该是,导致与 MATLAB 相同的结果!!!
最佳答案
这是因为 numpy 具有 Matlab 没有的一维数组的概念。加上 numpys broadcasting这提供了一个强大的简化(不用担心在任何地方插入转置),但确实意味着你必须考虑一下从 Matlab 进行翻译。在这种情况下,使用标量 Numpy 提取单个列会将结果简化为一维数组 - 但使用切片它会保留原始维度。如果您想更接近 Matlab 语义,您可以尝试使用 Matrix 类。参见 NumPy for matlab users详情页。在这种情况下,您可以执行以下任一操作:
m[:,0][:,newaxis] # gives same as matlab
np.matrix(m)[:,0] # gives same as matlab
但请记住,如果您使用矩阵类 *
变成矩阵乘法,您需要使用 multiply()
进行逐元素运算。 (这都包含在 NumPy for Matlab Users 页面中)。一般来说,我建议尝试习惯使用 1d 数组,在 matlab 中你会有列或行向量,而且通常一切正常。在将它们重新组装成二维数组时,您只需要担心列与行。
关于python - 只是对 NumPy 函数的结果感到好奇!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1724504/