2016-08-09 8 views
1

私はMatlabに12個のエンティティのベクトルを持っています。 a = [3 4 6 8 1 5 8 9 3 7 3 6]Matlabのベクトルに記号を挿入する方法

記号を一定の間隔で値とともに挿入したいとします。 aの最終的な価値はこのように見えます。 = [8 @#3 4 6 @#1 5 3 @#3 7]シンボルが3つのエンティティ後に繰り返されていることがわかるよう 。 これはどのようにMatlabで達成できますか?

+0

だから 'a'は文字列ですか? – Suever

+0

シンボルのパターンを定義する変数はどれですか?それとも、あなたの質問に特定の解決策が必要なのですか? – GameOfThrows

+0

シンボルは任意に選択されています。しかし、パターンはベクトルの長さを通して繰り返されます。 –

答えて

3

sprintfを使用できます。例えば
は:

a=[3 4 6 8 1 5 8 9 3 7 3 6 ] 
Z = sprintf('#%d %[email protected] %d& %d< ',a); 

は、最大使用するために、必要に応じて

Z = #3 [email protected] 6& 8< #1 [email protected] 8& 9< #3 [email protected] 3& 6< 

はsprintfは何度でも文字列を繰り返します生成します。

スペースを望んでいたところ、私が言うことができませんでしたが、彼らは一様である場合

を編集し、必要に応じて、あなたはsprintfの文で文字列パターンを調整することができます。はsprintfの文の末尾にスペースを追加しましたがOPの出力文字列

+0

それは簡単でとても良いです! '<'の後にスペースを追加すると、完全になります。すなわち、 'Z = sprintf( '#%d%d @%d&%d&%d <'、a)'はOPによって期待される出力を与えます。 '#3 4 @ 6&8 <#1 5 @ 8&9 < 3&6 <' –

+0

ハ、私は1つお見逃し、私の答え – Trogdor

+0

@Trogdorを編集します。ありがとうあなたのソリューションは非常に良いです。しかし、ベクトルaにバイナリ(1または0)があれば、数字と記号の間に空白はありません(1 @のように)。しかし、実数があれば、その間に空白があります(4&のような)。 Matlabでも可能ですか? –

1

キーの解決策は、repmatを使用してシンボル配列を複製し、数字の配列と同じ長さにすることです。 次の例のすべての要素が一桁のときに動作します

S = ['#', '@', '&', '<']; %Symbols 
a=[3 4 6 8 1 5 8 9 3 7 3 6 3 4 6 8 1 5 8 9 3 7 3 6]; 

A = char([3 4 6 8 1 5 8 9 3 7 3 6 3 4 6 8 1 5 8 9 3 7 3 6] + double('0')); %Convert digits to characters. 
T = repmat(S, [1, ceil(length(A)/length(S))]); %Replicate S to be in length of A, or longer 
T = T(1:length(A)); %Set T to same size as A 
Z = char(zeros(1, length(A)*2)); 
Z(1:2:end) = T; %Fill symbols 
Z(2:2:end) = A; %Fill numbers 

結果:スペースで
Z = #[email protected]&6<8#[email protected]&8<9#[email protected]&3<6#[email protected]&6<8#[email protected]&8<9#[email protected]&3<6


S = ['#', '@', '&', '<']; %Symbols 
a=[3 4 6 8 1 5 8 9 3 7 3 6 3 4 6 8 1 5 8 9 3 7 3 6]; 

A = char([3 4 6 8 1 5 8 9 3 7 3 6 3 4 6 8 1 5 8 9 3 7 3 6] + double('0')); %Convert digits to characters. 
%T = repmat(S, [1, ceil(length(A)/length(S))]); %Replicate S to be in length of A, or longer 
%T = T(1:length(A)); %Set T to same size as A 
Z = char(zeros(1, length(A)*3)); %Allocate 3 times length of A (for symbol, for digit, and for space). 

%#3 [email protected] 6& 8< #1 [email protected] 8& 9< #3 
Z(1:12:end) = S(1);  %# 
Z(2:12:end) = A(1:4:end); %3 
Z(3:12:end) = ' ';  %' ' 
Z(4:12:end) = A(2:4:end); %4 
Z(5:12:end) = S(2);  %@ 
Z(6:12:end) = ' ';  %' ' 
Z(7:12:end) = A(3:4:end); %6 
Z(8:12:end) = S(3);  %& 
Z(9:12:end) = ' ';  %' ' 
Z(10:12:end) = A(4:4:end); %8 
Z(11:12:end) = S(4);  %< 
Z(12:12:end) = ' ';  %' ' 

結果:
Z =
#3 [email protected] 6& 8< #1 [email protected] 8& 9< #3 [email protected] 3& 6< #3 [email protected] 6& 8< #1 [email protected] 8& 9< #3 [email protected] 3& 6<

+0

実際にシンボルを挿入した後、#3 4 @ 6&8 <#1 5 @ 8&9 <#3 7 @ 3&6 <のようなエンティティ間にスペースが必要です。これはMatlabの助けを借りてできないのですか? –

+0

@ Habib.Khan OK、スペースを入れて...目的を教えてもらえますか? – Rotem

+0

シンボルは、シンボルの目撃時に特定のアクションを実行するためのコンパイラ指令です。 –

0

たとえば配列、a=[3 4 6]

挿入「」、文字の数の変更を一致させるためです。

a=['3' '^' '4' '#' '6']又は

a=['3'; '^'; '4'; '#'; '6']

より

a=['3' '4' '6']

それは数として不可能3,4,6-あります。

1つの配列には1つの可変型があります。 (私が知っているように)

関連する問題