2017-01-26 1 views
0

これを行うための適切な構文がわかりません。私はそれぞれが15の要素を持つ4つのベクトルを持っています。私は元のベクトルのそれぞれの最初の要素を含む長さ4のベクトルを抽出し、それを使って処理したいと思います。そして、各ベクトルの2番目の要素などで同じことを行い、すべての答えを行列または配列に格納したいと思います。このような何か:MATLABはベクトルの配列をループします

for i = 1:15 
    new_vec=zeros(4); 
    n=1; 
     for fc = {vec_A, vec_B, vec_C, vec_D} 
      new_vec(n)=fc(i); 
      n=n+1; 
     end 
    Final_answers{i}=functionDoThings(new_vec); 
end 

しかし、私は得る:

> The following error occurred converting from cell to double: Error 
> using double Conversion to double from cell is not possible. Error in 
> my_script (line 31) 
>    new_vec(n)=fc(i); 

私が行方不明だとこれを行うための簡単な方法があるように私は感じます。

+2

は(彼らは最初の場所にされている必要がありますおそらく何である)4x15マトリックスに一緒に4つのベクトルを入れた後、取ります行列の各4x1列。 – beaker

答えて

1

あなたの内側のループは、1×4セルをループされる:

for fc = {vec_A, vec_B, vec_C, vec_D} 
    new_vec(n)=fc{1}(i) 
    n=n+1; 
end 

これは、各反復における1x1のセルであるFCになります。

for fc = {vec_A, vec_B, vec_C, vec_D} 
    new_vec(n)=fc{1}(i) 
    n=n+1; 
end 

{1} FC及び(i)の最初のセルにアクセスする所望の要素を:あなたは、中括弧を使用する必要があるセル内の実際のデータにアクセスする

ビーカーが提案のように、行列を使用する方が簡単かつ高速ですが:

fc = [vec_A; vec_B; vec_C; vec_D]; 
for i = 1:15 
    new_vec = fc(:,i); 

    ... 
end 
+1

おそらく 'fc'をループから抜かなければなりません。同じ配列を15回生成する必要はありません。 – beaker

+0

有効な点!私は内部ループを解明していただけで、それ以上の改善は考えていませんでした。 – Yakedo

+0

これはちょうど私が必要としたものでした。 あなたのfcは私に64x1の行列を与えましたので、私は次のようになりました: fc = [vec_A、vec_B、vec_C、vec_D];for i = 1:15 new_vec = fc(i、:); ...端 –

0

fc(i)は、doubleとして配列に格納しようとしている間に、cellを返しています。明らかに、配列を単一の要素に変換することはできません。

したがって、配列に格納する代わりに、セルに格納する必要があります。

for i = 1:15 
    new_cell=cell(4); 
    n=1; 
    for fc = {vec_A, vec_B, vec_C, vec_D} 
     new_cell{n}=fc(i); 
     n=n+1; 
    end 
Final_answers{i}=functionDoThings(new_cell); 
end 

希望します。

+0

これは、functionDoThingsが二倍の配列を必要とするのに役立ちます。しかし、ありがとう! –

関連する問題