假设我在Matlab R2013a中有这个矩阵
M = kron(A,B);
其中A和B是矩阵,其中是一个“大”数。现在,我只想提取 的一个子矩阵,由它只取几行组成M
Msub = M(rows,:);
其中rows是长度为的向量。
问:在Matlab R2013a中,有没有一种有效的方法来构建Msub而无需M之前构建?
假设我在Matlab R2013a中有这个矩阵
M = kron(A,B);
其中A和B是矩阵,其中是一个“大”数。现在,我只想提取 的一个子矩阵,由它只取几行组成M
Msub = M(rows,:);
其中rows是长度为的向量。
问:在Matlab R2013a中,有没有一种有效的方法来构建Msub而无需M之前构建?
这是一个可能有帮助的想法。粗略地说,似乎克罗内克乘积的行是行的克罗内克乘积。(我希望在网上找到一个很好的参考,但我找不到;所以这里有一个小草图。)
一般来说,对于的元素的公式是 (此定义参考 Tolimieri 等人,离散傅里叶变换和卷积算法,第 2 版,第 2 章。)
考虑 。由于只有一行,因此和。
令。如果是行,即,同样是行,即,然后 这是行。
相应的算法将是这样的。要计算行,
r = floor(i/M);
m = i - r*M;
kron(A(r,:), B(m,:))
实际上这在 Matlab 中不太适用,因为上面的数学使用从 0 开始索引的数组,而Matlab 使用基于 1 的数组;不幸的是,我没有方便的 Matlab 来测试这些实现细节。
即便如此,对于您的应用程序而言,将沿这些线计算的几行堆叠起来可能比从完整的 Kronecker 产品中选择一个子集更有效。