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

1 python matlab numpy

我正在尝试转换一段MATLAB代码,这是我正在努力的一条线:

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

我想出来了

wlab = lab*(np.concatenate((3,1-f,f/2,f/2))) 
Run Code Online (Sandbox Code Playgroud)

我现在如何重塑它?

And*_*uri 5

不会为你的代码做,但更多作为一般知识:

bsxfun 是一个填补MATLAB的空白的函数,python不需要填充:广播.

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

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

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