在matlab中为多个单元格分配值

时间:2012-07-12 16:29:24

标签: matlab cell

我有一个逻辑向量,一个单元格数组和一个我想要分配的字符串值。

我试过“cell {logical} = string”,但是我收到以下错误:

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

你有解决方案吗?

4 个答案:

答案 0 :(得分:18)

您实际上不需要使用deal

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

a(b) = {myString};

查看最后一行:在左侧,我们从a中选择一个单元格子集,并说它们应该都等于右侧的单元格,这是一个包含字符串的单元格。

答案 1 :(得分: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'
         []
         []

答案 2 :(得分:7)

正如H.Muster所说,deal是前往这里的方式。括号的原因是(在H.Muster的设置之后)a{b}返回以逗号分隔的列表;需要在此列表周围放置括号以将其连接到向量中。在Matlab中运行help lists可能会进一步澄清,就像comma-separated lists

上的文档一样

修改:user2000747提供的answer似乎比使用deal更清晰。

答案 3 :(得分:1)

另一种解决方案可以是

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

这似乎是一个不必要的添加,但是你想要为一个长度为1e8的1D单元阵列中的3个单元分配一个向量。如果使用逻辑,则需要创建大小接近100Mb的逻辑数组。