2016-10-18 7 views
1

で行列要素を交換してください1 -1 -1 -1]は、私は次の文字列の行列を持つベクトルMATLAB

最終マトリックスmananalogは次のようになります[1 1 1 1 -1 -1 -1 -1 1 1 1 1 1 1 1 1]

私が使用しようとしました次のコード:

mananalog(find(encodedData=='0'))=[num2str(1*(-Vd)) num2str(1*(-Vd)) num2str(1*(-Vd)) num2str(1*(-Vd))]; 
mananalog(find(encodedData=='1'))=[num2str(1*(Vd)) num2str(1*(Vd)) num2str(1*(Vd)) num2str(1*(Vd))]; 

VD = 0.7

それにもかかわらず、私は次のエラーがあります。これを行うように

In an assignment A(I) = B, the number of elements in B and I must be the same. 

あなたは機能を知っていますか?あなたはこのようregexprepまたはstrrepを使用することができます

+0

文字列か配列ですか? MATLABで '+ encodedData'と入力するとどうなりますか? –

+0

@StewieGriffin encodedDataは文字行列です[1001001001001100101010 ...] –

+0

'Vd'の内容は何ですか? – bushmills

答えて

3

(のために使用しません):

encodedData='1 0 1 1' 
regexprep(regexprep(encodedData, '1', '1 1 1 1'),'0','-1 -1 -1 -1') 
ans = 
1 1 1 1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 

それはあなたがが二行使用している場合は少し簡単です:

encodedDataExpanded = regexprep(encodedData, '1', '1 1 1 1'); 
encodedDataExpanded = regexprep(encodedDataExpanded , '0', '-1 -1 -1 -1') 

をこれは、最初の文字を検索します文字列に'1'を置き、文字列を'1 1 1 1'に置き換えます。次に、'0'を検索し、文字列を'-1 -1 -1 -1'に置き換えます。整数ではなく文字で

encodedData = [1 0 1 1]; 
reshape(bsxfun(@minus, 2*encodedData, ones(4,1)), 1, []) 
ans =  
    1 1 1 1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 

そして、あなたは後でMATLAB R2015aを持っている場合や、ルイス・コメントで述べたように、その後repelemがあります:

repelem(2*encodedData-1, 4) 
+0

完璧に動作します!ありがとう!! –

+0

文字列の代わりにint型を使ってこれを行う方法を知っていますか?私は最終的な行列が整数からなることを意味します。 –

+0

私はregexprepを使用しようとしましたが、文字列でのみ動作します –

1

あなたがしたくない場合文字列と数値の間で変換することもできます。

>> kron(encodedData, ones(1,4)) + kron(1-encodedData, -ones(1,4)) 
+1

また、 'repeatlem(2 * encodedData-1,4)' –

+0

はい、それは私の愚かでした。 「リピュレム」は間違いなくここに行く方法です。 – CKT

関連する問題