首页 文章

矩阵乘法问题 - Numpy vs Matlab?

提问于
浏览
1

我试图将一些Matlab代码翻译成Python(使用numpy) . 我有以下Matlab代码:

(1/x)*eye(2)

X只是1000000.据我所知,* Matlab中的*表示矩阵乘法,而等价的是ndy中的.dot . 所以在Python中,我有:

numpy.array([(1/x)]).dot(numpy.identity(2))

当我尝试运行numpy代码时,我得到错误“shapes(1,)和(2,2)未对齐:1(dim 0)!= 2(dim 0)” .

显然我不理解某事 . 谁知道适当的numpy代码是什么?

2 回答

  • 4

    由于 x 是标量,如果在MATLAB中将矩阵乘以标量,它只需按该值缩放所有条目 . 不需要矩阵乘法 .

    如果你想在 numpy 中实现相同的功能,你可以在MATLAB中执行相同的操作:

    (1/x)*numpy.identity(2)
    

    如果 x 是兼容维度的矩阵,那么您使用 numpy.dot

    (1/x).dot(numpy.identity(2))
    

    因此,在决定执行操作之前,您需要确保知道 x 是什么 .

    numpy 使用 * 运算符执行逐元素乘法,因此如果您想要实际的矩阵乘法,请使用 numpy.dot . 您将获得不兼容的维度,因为标量和矩阵之间的真正矩阵乘法是不可能的 .

  • 1

    基本上在numpy操作中*和dot是不同的 .

    (*)执行元素操作 - 每个矩阵元素与其他矩阵对应的元素

    a.dot(c) - 执行实际的数学矩阵乘法,我们在高中学习 .

    a = np.arange(9).reshape(3,3)
    
    b = np.arange(10,19).reshape(3,3)
    
    In [47]: a*b
    
    Out[47]:
    array([[ 0, 11, 24],
    [ 39, 56, 75],
    [ 96, 119, 144]])
    
    In [48]: a.dot(b)
    
    Out[48]:
    array([[ 45, 48, 51],
    [162, 174, 186],
    [279, 300, 321]])
    

相关问题