私のように、クロネッカー テンソル積が何であるかわからない場合は、このより直感的な (そして実際には私がより速く考える) ソリューションに興味があるかもしれません。
c(ceil((1:length(c)*n)/n));
そのため、ここではベクトル インデックスを使用して行列を複製しました。たとえば、上記の 2 つのケースを使用すると、次のことができます。
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 のベクトルを作成し、3 で割って切り上げます (つまり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.