eTo*_*us1 11 python matlab numpy octave bsxfun
这是我在Octave中的代码:
sum(bsxfun(@times, X*Y, X), 2)
代码的bsxfun部分产生了元素乘法,所以我认为这样numpy.multiply(X*Y, X)可以解决问题,但我得到了一个异常.当我进行一些研究时,我发现元素乘法不适用于Python数组(特别是如果X和Y的类型为"numpy.ndarray").所以我想知道是否有人可以解释这一点 - 即将类型转换为不同类型的对象工作?Octave代码有效,所以我知道我没有线性代数错误.我假设bsxfun和numpy.multiply实际上并不等同,但我不确定为什么所以任何解释都会很好.
我找到了一个网站!这给了Octave到Matlab的函数转换,但在我的情况下似乎没有帮助.
Dan*_*Dan 14
bsxfun在Matlab中代表二进制单例扩展,在numpy中称为广播,应该自动发生.解决方案将取决于您的维度X,即它是行或列向量,但这个答案显示了一种方法:
我认为,这里的问题是,广播需要尺寸之一是1,不像MATLAB,numpy的似乎是一个1个维2元素矢量和一个2维2元件之间进行区分,即,形状的矩阵之间的差(2,)的形状,并且(2,1),你需要后者才能进行广播.