14

1D論理ベクトル、セル配列、および割り当てたい文字列値があります。

「cell{logical}= string」を試しましたが、次のエラーが発生します。

The right hand side of this assignment has too few values to satisfy
the left hand side.

解決策はありますか?

4

4 に答える 4

20

実際にを使用する必要はありませんdeal

a = cell(10,1); % cell array
b = rand(1,10)>0.5; % vector with logicals
myString = 'hello'; % string

a(b) = {myString};

最後の行を見てください。左側では、セルのサブセットを選択してaおり、右側のセル(文字列を含むセル)とすべて同じである必要があると言っています。

于 2013-01-22T14:56:58.493 に答える
14

あなたはこれを試すことができます

a = cell(10,1); % cell array
b = rand(1,10)>0.5; % vector with logicals
myString = 'hello'; % string

[a{b}] = deal(myString);

結果は次のようになります。

a = 

    'hello'
         []
         []
    'hello'
    'hello'
         []
    'hello'
    'hello'
         []
         []
于 2012-07-12T16:41:21.017 に答える
7

H.Musterが言っdealたように、ここに行く方法です。角かっこを使用する理由は、(H.Musterの設定に従って)a{b}コンマ区切りのリストを返すためです。このリストをベクトルに連結するには、このリストの前後に角かっこを配置する必要があります。Matlabで実行すると、コンマ区切りリストhelp listsのドキュメントと同様に、さらに明確になる可能性があります

編集: user2000747によって提供される答えは、を使用するよりもはるかにクリーンなようですdeal

于 2012-07-13T02:46:25.490 に答える
2

別の解決策は

a = cell(10,1);
a([1,3]) = {[1,3,6,10]}

これは不要な追加のように思われるかもしれませんが、長さ1e8の1Dセル配列内の3つのセルにベクトルを割り当てたいとします。論理を使用する場合、これには、ほぼ100Mbのサイズの論理配列を作成する必要があります。

于 2014-05-09T13:57:30.033 に答える