python - 只是对 NumPy 函数的结果感到好奇!

标签 python matlab numpy

我在硕士论文中使用了 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 中你会有列或行向量,而且通常一切正常。在将它们重新组装成二维数组时,您只需要担心列与行。

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

关于python - 只是对 NumPy 函数的结果感到好奇!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1724504/

相关文章:

python - 在 numpy 中使用 exp 和最小正 float128 避免下溢

python - Scala 相当于 Python 生成器?

python - 根本无法导入 Python 的电子邮件模块

python - 如何使用 tkinter 在几何条纹之间制作条纹线?

matlab - 将自定义绘图添加到 MATLAB 中的绘图目录

Python没有名为numpy的模块

python - Sublime 编辑器2 : Key-bindings to send command to terminal

matlab - 将 1D 向量 (nx1) 更改为 3D 矩阵 (1x1xn)

matlab - Matlab 中的隐含波动率

python - Sci-Kit 学习 SGD 算法时出错 - "Array contains NaN or infinity"