Назначить значение нескольким ячейкам в matlab

У меня есть 1D логический вектор, массив ячеек и строковое значение, которое я хочу назначить.

Я попробовал "cell {logical} = string", но я получаю следующую ошибку:

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

У вас есть решение?

Ответ 1

На самом деле вам не нужно использовать deal.

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

a(b) = {myString};

Глядя на последнюю строку: в левой части мы выбираем подмножество ячеек из a и говорим, что все они должны равняться ячейке с правой стороны, которая является ячейкой, содержащей строку.

Ответ 2

Вы можете попробовать это

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'
         []
         []

Ответ 3

Как сказал H.Muster, deal - путь сюда. Причиной для скобок является то, что (после установки H.Muster) a{b} возвращает список, разделенный запятыми; скобки должны быть размещены вокруг этого списка, чтобы объединить его в вектор. Выполнение help lists в Matlab может уточнить, так же как и документация разделенные запятыми списки

Изменить: answer, предоставленный пользователем2000747, выглядит намного чище, чем использование deal.

Ответ 4

Другим решением может быть

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

Это может показаться ненужным добавлением, но скажите, что вы хотите назначить вектор 3 ячейкам в массиве 1D ячеек длиной 1e8. Если используется логическое, это потребует создания логического массива размером почти 100 МБ.