如果您像我一样不知道 Kronecker 张量积是什么,您可能会对这个更直观(实际上我认为更快)的解决方案感兴趣:
c(ceil((1:length(c)*n)/n));
所以在这里我使用向量索引来复制矩阵。例如,使用上面的两种情况,我们可以这样做:
c = 1:3;
c([1 1 1 2 2 2 3 3 3]) %for each
c([1 2 3 1 2 3 1 2 3]) %for times
所以问题是我们如何在没有您要求的功能的情况下制作向量 [1 2 3 1 2 3 1 2 3]。所以我用我们需要的元素数量制作了一个向量,即 1:9,然后除以三并向上取整(即ceil((1:9)/3)
在命令行中尝试。
一些基准测试(我知道这些东西应该在循环中,所以也许这不是那么准确):
c = 1:3; n = 3;
tic; k = kron(c, ones(1, n)); toc; % 0.000208 seconds.
tic; a = c(ceil((1:length(c)*n)/n)); toc; % 0.000025 seconds.
clear;
c = 1:1000000; n = 3;
tic; k = kron(c, ones(1, n)); toc; % 0.143747 seconds.
tic; a = c(ceil((1:length(c)*n)/n)); toc; % 0.090956 seconds.
clear;
c = 1:10000; n = 1000;
tic; k = kron(c, ones(1, n)); toc; % 0.583336 seconds.
tic; a = c(ceil((1:length(c)*n)/n)); toc; % 0.237878 seconds.