Удаление элементов из массива ячеек в MATLAB
У меня есть массив ячеек, как показано ниже:
a = {[1 2 3] [5 3 6] [9 1 3]};
Теперь я хочу удалить 1s из каждого массива в a, который содержит 1 , чтобы выход был таким, как показано
a = {[2 3] [5 3 6] [9 3]};
Я знаю индексы массивов в ячейке array 'a', которые содержат 1. Это можно сделать с помощью цикла for и временной переменной, но это занимает много времени (я хочу выполнить операцию с массивом ячеек размером примерно 1x100000. Тот, что выше, просто для примера)
Я хочу знать, есть ли там это любой прямой метод, который может сделать это быстро.
3 ответов:
Почти все будет медленно с таким большим массивом ячеек. Вы можете попробовать сделать это с помощью
cellfun, но это не обязательно будет быстрее, чем цикл for.a = cellfun(@(x)x(x ~= 1), a, 'UniformOutput', false); % a{1} = % 2 3 % a{2} = % 5 3 6 % a{3} = % 9 3
Как уже прокомментировал Suever, поскольку вы используете массив ячеек и это динамический контейнер, у вас нет выбора, кроме как перебирать каждую ячейку, если вы хотите изменить содержимое. Просто чтобы быть самодостаточным, вот подход цикла
for, чтобы делать вещи:for ii = 1 : numel(a) a{ii} = a{ii}(a{ii} ~= 1); endЭто может быть быстрее, так как он не подвергается накладным расходам
cellfun. Приведенный выше код обращается к вектору в каждой ячейке и извлекает те значения, которые не равны 1, и перезаписывает соответствующую ячейку с этим новым вектором.Используя Ваш пример:
a = {[1 2 3] [5 3 6] [9 1 3]};Получаем:
>> format compact; celldisp(a) a{1} = 2 3 a{2} = 5 3 6 a{3} = 9 3
В этом примере показано, как удалить данные из отдельных ячеек и как удалить целые ячейки из массива ячеек. Чтобы выполнить код в этом примере, создайте массив ячеек размером 3 на 3:
C = {1, 2, 3; 4, 5, 6; 7, 8, 9};Удаление содержимого определенной ячейки путем присвоения ячейке пустого массива, используя фигурные скобки для индексации содержимого, {}:
C{2,2} = []Этот код возвращает
C = [1] [2] [3] [4] [] [6] [7] [8] [9]Удаление наборов ячеек с помощью стандартного индексирования массива с гладкими скобками, (). Например, это команда
C(2,:) = []Удаляет вторую строку C:
`
C = [1] [2] [3] [7] [8] [9]`
Comments