2016-09-08 8 views
2

各セルが異なるサイズの配列であるMATLABでセル配列を作成する際に助けが必要です。たとえば、のは、私はこの単純な配列と価値を持っていると仮定してみましょう:MATLABのセル配列に一度に異なる値を割り当てる

A = [5 3 8 7 0 4 1]; 
B = 10; 

Cがそのようなことを作成する必要がありますセルアレイ:

C = 
[10 20 30 40 50] 
[10 20 30] 
[10 20 30 40 50 60 70 80] 
[10 20 30 40 50 60 70] 
[Empty matrix 1x0] 
[10 20 30 40] 
[10] 

は、1つの操作だけでそれをすることが可能ですか?私は試しました:

C = cellfun(@(a,b)b*ones(1,a), A,B) 

しかし、それは動作しませんでした。

答えて

3

cellfunは、セル配列を関数への入力として想定しています。数値配列を使用しているので、代わりにarrayfunを使用してください。また、配列内の要素ごとにスカラーを出力しないので、UniformOutputフラグを0に設定する必要があります。最後に、colon演算子を使用して、行列乗算の代わりに必要な処理を行います。無名関数は、第1の入力として宣言されていること

A = [5 3 8 7 0 4 1]; 
B = 10; 
C = arrayfun(@(x) B*(1:x), A, 'UniformOutput', 0).'; 

をメモ:あなたは絶対に、そのようなあなたがあなたの記事で示したものとして、列ベクトルが必要な場合は、出力を転置ので、出力は残念ながらセルの行ベクトルになります語彙スコープはarrayfunにあります。つまり、匿名関数宣言の前にワークスペースに表示されていた変数がすべて表示されます。別の入力としてarrayfunに手動で入力する代わりに、関数内のその変数にアクセスすることができます。

現在入手:

>> format compact 
>> celldisp(C) 
C{1} = 
    10 20 30 40 50 
C{2} = 
    10 20 30 
C{3} = 
    10 20 30 40 50 60 70 80 
C{4} = 
    10 20 30 40 50 60 70 
C{5} = 
    [] 
C{6} = 
    10 20 30 40 
C{7} = 
    10 
+0

こんにちは、私は私があまりにも...それは型「セル」の入力引数の '未定義関数「コロン」と言うことをしようとしたことを言うのを忘れていました。 @(x)B *(1:x)のエラー ' – PhoenixBlue

+0

@PhoenixBlue 'cellfun'は**セル配列**を想定しています。私の投稿を全部読んでください。あなたは気づくでしょう**私は 'cellfun'を使わなかった**。 – rayryeng

+0

OH!申し訳ありません私の悪い!出来た!私はちょうど単純な配列の代わりに(私の最初の試みでも...)セル配列を置く!再度、感謝します!! – PhoenixBlue

関連する問題