使用 Kronecker 产品避免 Matlab 中的 for 循环

Avoiding a for loop in Matlab with Kronecker product

如果我有两个序列 A 和 B,其中包含元素 a1、a2、... 和 b1、b2、...,其中 a_i 和 b_i 的维度为 1xn 和 1xm,分别,然后我想制作一个新的序列 C,其中包含: a_i(1)*b_i, a_i(2)*b_i, ... , a_i(n)*b_i。所以对于 C 的第 i 个元素,我想要元素 a_i 和 b_i 的克罗内克积。我想在 Matlab 中编写代码,但没有 for 循环。对于 b_i 是标量的情况,使用

可以达到预期的结果
C = A.*B

但是,这不适用于非标量 b_i。所以我现在做的是长度为 L:

的序列
C = [];
for ii = 1:L
    C = [C; kron(A(ii,:),B(ii,:))];
end

但我认为这在没有 for 循环的情况下一定是可能的。这是我使用符号工具箱的代码:

clc; clear;

L = 5;

syms('a1',[L,1]);
syms('a2',[L,1]);
syms('b1',[L,1]);
syms('b2',[L,1]);

A = [a1,a2];
B = [b1,b2];

C1 = A.*B % only for size(B,2)=1

C2 = [];

for ii = 1:L
    C2 = [C2;kron(A(ii,:),B(ii,:))];
end
C2

C3 = kron(A,B) % does not work

这里reshape and implicit expansion是用来计算结果的:

C = reshape(B .* reshape (A, L, 1, []), L, []);