Назначить значение нескольким ячейкам в 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 МБ.