numpy.dot的行为是否与matlab不同。*?

时间:2016-02-14 13:10:57

标签: python matlab numpy

我尝试将matlab代码移植到numpy,特别是矩阵乘法:

 % matlab multiplication of two 480x640 double, yields 480x640 double
 result = xgrid.*depth

在python中,我认为它应该像

 result = xgrid.dot(depth)

但我得到ValueError: shapes (480,640) and (480,640) not aligned: 640 (dim 1) != 480 (dim 0)转置无效,因为它改变了输出的形状。

我怎样才能正确移植代码?

4 个答案:

答案 0 :(得分:8)

MATLAB .*是逐元素乘法。在numpy普通*中是一回事。 np.dot是矩阵乘法函数..

答案 1 :(得分:3)

翻译是元素乘法:

    <div class="form-group">
            <label class="control-label col-md-2" for="State_Id">State Name</label>
            <div class="col-md-10">
                <select class="form-control" id="State_Id" name="State_Id"><option value="">Select State</option>
<option value="1">Madhya Pradesh</option>
<option value="2">Gujarat</option>
<option value="4">Punjab</option>
<option value="9">Tamil Nadu</option>
<option value="10">Haryana</option>
</select>
                <span class="field-validation-valid text-danger" data-valmsg-for="State_Id" data-valmsg-replace="true"></span>
            </div>
        </div>

和矩阵乘法:

result = xgrid .* depth; % matlab
result = xgrid * depth   # python

答案 2 :(得分:1)

在错误消息中,您在sort -t' ' sort -t ' ' sort -t " " sort -t" " sort -t=" " 中使用array class看起来就是这样。默认情况下,此类对象的操作是逐点

numpy

事实上,你需要调用函数来使它成为&#34;矩阵式的&#34;:

import numpy as np

a = np.array([[1, 2], [3, 4]])

>>> a * a
array([[ 1,  4],
       [ 9, 16]])

您可能也有兴趣查看numpy.matrix

答案 3 :(得分:-2)

numpy.dot不是矩阵乘法,而是内积。尝试使用numpy.multiply或numpy.outer来实现你想要的目标

result = numpy.multiply(xgrid,depth)