14

我有一个一维逻辑向量、一个元胞数组和一个要分配的字符串值。

我尝试了“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}返回一个逗号分隔的列表;需要在此列表周围放置方括号以将其连接成一个向量。help lists在 Matlab 中运行可能会进一步澄清,逗号分隔列表上的文档可能会进一步澄清

编辑: user2000747 提供的答案似乎比使用deal.

于 2012-07-13T02:46:25.490 回答
2

另一种解决方案可以是

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

这似乎是一个不必要的添加,但假设您想将一个向量分配给长度为 1e8 的一维元胞数组中的 3 个元胞。如果使用逻辑,这将需要创建大小接近 100Mb 的逻辑数组。

于 2014-05-09T13:57:30.033 回答