18

一次元配列があるとしましょう:

a = [1, 2, 3];

配列と整数を取り、配列のn各要素を n 回複製する組み込みの Matlab 関数はありますか?

たとえば、呼び出しreplicate(a, 3)は を返す必要があり[1,1,1,2,2,2,3,3,3]ます。

これは とまったく同じではないことに注意してくださいrepmatreplicate各要素を実行して結果を連結することで確かに実装できますrepmatが、より効率的な組み込み関数があるかどうか疑問に思っています。

4

7 に答える 7

21

私はKRON関数のファンです:

>> a = 1:3;
>> N = 3;
>> b = kron(a,ones(1,N))

b =

    1     1     1     2     2     2     3     3     3

また、この関連する質問(2次元マトリックスの要素の複製を扱ったもの)を見て、マトリックスのインデックス付けを含む他のソリューションのいくつかを確認することもできます。これがそのような解決策の1つです( Edricの答えに触発されました):

>> b = a(ceil((1:N*numel(a))/N))

b =

    1     1     1     2     2     2     3     3     3
于 2009-12-22T17:24:32.523 に答える
20
a = [1 2 3];
N = 3;

b = reshape(repmat(a,N,1), 1, [])
于 2009-12-22T19:28:50.830 に答える
2

画像処理ツールボックスがある場合は、別の方法があります。

N = 3;
imresize(a, [1 N*numel(a)],'nearest')
于 2012-01-25T13:33:32.560 に答える
1
% To get b = [1 1 1 2 2 2 3 3 3]
N = 3;
a = [1 2 3];
temp_a = a(ones(N,1),:);
b = reshape(temp_a,1,numel(temp_a));

% To get b = [1 2 3 1 2 3 1 2 3]
N = 3;
a = [1 2 3];
temp_a = a(ones(N,1),:);
b = reshape(temp_a',1,numel(temp_a));
于 2012-08-13T06:21:59.777 に答える