web-dev-qa-db-ja.com

matlabの複数のセルに値を割り当てます

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

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

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

解決策はありますか?

13

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

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

a(b) = {myString};

最後の行を見てください。左側では、aからセルのサブセットを選択しており、それらはすべて右側のセル(文字列を含むセル)と等しくなければならないと言っています。

19
user2000747

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

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'
         []
         []
14
H.Muster

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

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

7
zroth

別の解決策は

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

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

2
patrik