Skip to main content
 首页 » 编程设计

python之需要帮助将 Matlab 的 bsxfun 转换为 numpy

2025年05月04日16bluestorm

我正在尝试转换一段 MATLAB 代码,这是我正在努力处理的一行代码:

f = 0 
wlab = reshape(bsxfun(@times,cat(3,1-f,f/2,f/2),lab),[],3) 

我想到了

wlab = lab*(np.concatenate((3,1-f,f/2,f/2)))  

现在我该如何 reshape 它?

请您参考如下方法:

不会为您的代码做这件事,但更多的是作为常识:

bsxfun 是一个函数,它填补了 MATLAB 中一个 python 不需要填补的空白:广播。

广播是这样一种情况,如果一个矩阵被乘法/加法/任何类似的矩阵与另一个正在使用的矩阵大小不同,该矩阵将被重复。

所以在 python 中,如果你有一个 3D 矩阵 A 并且你想将它的每个 2D 切片与一个 2D 矩阵 B 相乘,你不需要任何东西否则,python 将为您广播 B,它会一次又一次地重复矩阵。 A*B 就足够了。但是,在 MATLAB 中,这将引发错误 Matrix dimension mismatch。为了克服这个问题,您可以将 bsxfun 用作 bsxfun(@times,A,B) 并且这将广播(重复)B A 的第 3 个维度。

这意味着将 bsxfun 转换为 python 通常不需要任何东西。