matlab - 从两个 2 维矩阵创建一个 3 维矩阵

标签 matlab

我已经有一个 N_1 x N_2 矩阵 A 和一个 N_2 x N_3 矩阵 B

我想创建一个 N_1 x N_2 x N_3 矩阵 C,使得 C(i,j,k) = A(i,j) *B(j,k).

我想知道是否可以使用一些 Matlab 操作来创建 C,而不是逐个元素地创建?

最佳答案

您可以使用bsxfun执行与OP的答案相同的操作(实际上使用类似的方法在内部工作,但更干净一点):

C = bsxfun(@times, A, permute(B, [3 1 2]));

这也快了很多(bsxfun 必须在内部发挥一些作用 - 可能利用 MATLAB 的内部能力使用多个线程执行某些操作,或者可能只是排列较小的矩阵更快,或者类似因素的某种组合):

>> N1 = 100; N2 = 20; N3 = 4; A = rand(N1, N2); B = rand(N2, N3);
>> tic; for n = 1:10000; C = repmat(A, [1, 1, size(B, 2)]) .* permute(repmat(B, [1, 1, size(A, 1)]), [3, 1, 2]); end; toc
Elapsed time is 2.827492 seconds.
>> tic; for n = 1:10000; C2 = bsxfun(@times, A, permute(B, [3 1 2])); end; toc
Elapsed time is 0.287665 seconds.

编辑:permute 移动到 repmat 中可以节省一点时间,但仍然远不及 >bsxfun:

>> tic; for n = 1:10000; C = (repmat(A, [1 1 size(B, 2)]) .* repmat(permute(B, [3 1 2]), [size(A, 1) 1 1])); end; toc
Elapsed time is 2.563069 seconds.

关于matlab - 从两个 2 维矩阵创建一个 3 维矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16353522/

相关文章:

matlab - 如何在 Matlab 中生成这个形状?

matlab - 使用新的 Matlab 图形引擎绘制存储在 .mat 文件中的图形对象

matlab - 如何在 fortran mex 文件中使用 mxCalloc

matlab - 如何构建不同月份不同权重的移动时间平均值?

matlab - 多类 SVM(一个对所有)

C# - 将变量传递给 Matlab

matlab - Octave 音程中的行明智操作

matlab - 在 LIBSVM matlab 中执行额外验证

arrays - Matlab 中的 3D 合并

matlab - 为什么我在 MatCont 中收到 "current step too small"错误?