Nano Hash - криптовалюты, майнинг, программирование

Удаление элементов из массива ячеек в MATLAB

У меня есть массив ячеек, как показано ниже:

a = {[1 2 3] [5 3 6] [9 1 3]};

Теперь я хочу удалить 1 из каждого массива в a, который содержит 1, чтобы вывод был таким, как показано

a = {[2 3] [5 3 6] [9 3]};

Я знаю индексы массивов в массиве ячеек «a», которые содержат 1. Это можно сделать с помощью цикла for и временной переменной, но это занимает много времени (я хочу выполнить операцию над массивом ячеек размером что-то как 1x100000. Тот, что выше, просто для примера)

Я хочу знать, есть ли какой-либо прямой метод, который может сделать это быстро.


Ответы:


1

Практически все будет работать медленно с таким большим массивом ячеек. Вы можете попытаться сделать это с помощью cellfun, но это не обязательно будет быстрее, чем цикл for.

a = cellfun(@(x)x(x ~= 1), a, 'UniformOutput', false);

%   a{1} =
%        2     3
%   a{2} =
%        5     3     6
%   a{3} =
%        9     3
23.06.2016

2

Как уже прокомментировал 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
24.06.2016

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]`
24.06.2016
  • Предоставленный ввод не совпадает с тем, что указано в вопросе. Вы создаете отдельные элементы в виде ячеек, тогда как в вопросе используются вектора в виде элементов ячеек. Это происходит по касательной, и я не думаю, что это конструктивно при ответе на вопрос. Прошу прощения, если вы найдете оскорбление в этом комментарии, но это не ответ на вопрос. 24.06.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..