如果我正确理解您想要做什么,这应该可以解决问题(在我的示例中,您需要将 4 和 5 替换为 M 或 N):
>> A = rand(4, 5)
A =
0.8147 0.6324 0.9575 0.9572 0.4218
0.9058 0.0975 0.9649 0.4854 0.9157
0.1270 0.2785 0.1576 0.8003 0.7922
0.9134 0.5469 0.9706 0.1419 0.9595
>> B = permute(reshape(repmat(A, 1, 5), 4, 5, 5), [1 3 2]) ;
>> C = permute(reshape(repmat(eye(5, 5), 1, 4), 5, 5, 4), [3 1 2]) ;
>> T = C .* B
>> squeeze(T(1, :, :))
ans =
0.8147 0 0 0 0
0 0.6324 0 0 0
0 0 0.9575 0 0
0 0 0 0.9572 0
0 0 0 0 0.4218
注意:我没有在 MATLAB 中检查上面的代码,我只使用numpy 进行了检查,但这应该可以满足您的要求。这是python 中使用numpy 的示例:
>>> import numpy
>>> import numpy.matlib as matlib
>>> A = numpy.random.rand(4, 5)
>>> A
array([[ 0.44172719, 0.32698936, 0.53422512, 0.39081766, 0.09870158],
[ 0.65483718, 0.50364349, 0.74913438, 0.87151756, 0.71811372],
[ 0.54355853, 0.44174294, 0.61738783, 0.74293526, 0.1598779 ],
[ 0.77675639, 0.204072 , 0.69584264, 0.04263266, 0.24350847]])
>>> B = matlib.repmat(A, 1, 5).reshape((4, 5, 5))
>>> B
array([[[ 0.44172719, 0.32698936, 0.53422512, 0.39081766, 0.09870158],
[ 0.44172719, 0.32698936, 0.53422512, 0.39081766, 0.09870158],
[ 0.44172719, 0.32698936, 0.53422512, 0.39081766, 0.09870158],
[ 0.44172719, 0.32698936, 0.53422512, 0.39081766, 0.09870158],
[ 0.44172719, 0.32698936, 0.53422512, 0.39081766, 0.09870158]],
[[ 0.65483718, 0.50364349, 0.74913438, 0.87151756, 0.71811372],
[ 0.65483718, 0.50364349, 0.74913438, 0.87151756, 0.71811372],
[ 0.65483718, 0.50364349, 0.74913438, 0.87151756, 0.71811372],
[ 0.65483718, 0.50364349, 0.74913438, 0.87151756, 0.71811372],
[ 0.65483718, 0.50364349, 0.74913438, 0.87151756, 0.71811372]],
[[ 0.54355853, 0.44174294, 0.61738783, 0.74293526, 0.1598779 ],
[ 0.54355853, 0.44174294, 0.61738783, 0.74293526, 0.1598779 ],
[ 0.54355853, 0.44174294, 0.61738783, 0.74293526, 0.1598779 ],
[ 0.54355853, 0.44174294, 0.61738783, 0.74293526, 0.1598779 ],
[ 0.54355853, 0.44174294, 0.61738783, 0.74293526, 0.1598779 ]],
[[ 0.77675639, 0.204072 , 0.69584264, 0.04263266, 0.24350847],
[ 0.77675639, 0.204072 , 0.69584264, 0.04263266, 0.24350847],
[ 0.77675639, 0.204072 , 0.69584264, 0.04263266, 0.24350847],
[ 0.77675639, 0.204072 , 0.69584264, 0.04263266, 0.24350847],
[ 0.77675639, 0.204072 , 0.69584264, 0.04263266, 0.24350847]]])
>>> C = matlib.repmat(numpy.identity(5), 4, 1).reshape(4, 5, 5) * B
>>> C
array([[[ 0.44172719, 0. , 0. , 0. , 0. ],
[ 0. , 0.32698936, 0. , 0. , 0. ],
[ 0. , 0. , 0.53422512, 0. , 0. ],
[ 0. , 0. , 0. , 0.39081766, 0. ],
[ 0. , 0. , 0. , 0. , 0.09870158]],
[[ 0.65483718, 0. , 0. , 0. , 0. ],
[ 0. , 0.50364349, 0. , 0. , 0. ],
[ 0. , 0. , 0.74913438, 0. , 0. ],
[ 0. , 0. , 0. , 0.87151756, 0. ],
[ 0. , 0. , 0. , 0. , 0.71811372]],
[[ 0.54355853, 0. , 0. , 0. , 0. ],
[ 0. , 0.44174294, 0. , 0. , 0. ],
[ 0. , 0. , 0.61738783, 0. , 0. ],
[ 0. , 0. , 0. , 0.74293526, 0. ],
[ 0. , 0. , 0. , 0. , 0.1598779 ]],
[[ 0.77675639, 0. , 0. , 0. , 0. ],
[ 0. , 0.204072 , 0. , 0. , 0. ],
[ 0. , 0. , 0.69584264, 0. , 0. ],
[ 0. , 0. , 0. , 0.04263266, 0. ],
[ 0. , 0. , 0. , 0. , 0.24350847]]])