Arhn - архитектура программирования

MATLAB: Как заменить числа в одном столбце ячейки соответствующими строками?

У меня есть ячейка 50000 * 2 с числовым содержимым. Теперь я хочу заменить второй столбец с числами от 1 до 10 соответствующими строками, такими как «самолет» для 1, «автомобиль» для 2 и так далее. Какой самый эффективный метод для этого? Сначала я попытался разделить содержимое второго столбца на новую ячейку class1 и преобразовать его в строки и попытался заменить, применив приведенный ниже код:

classes1(strcmp('1',classes1))={'airplane'};
classes1(strcmp('2',classes1))={'automobile'};
classes1(strcmp('3',classes1))={'bird'};
classes1(strcmp('4',classes1))={'cat'};
classes1(strcmp('5',classes1))={'deer'};
classes1(strcmp('6',classes1))={'dog'};
classes1(strcmp('7',classes1))={'frog'};
classes1(strcmp('8',classes1))={'horse'};
classes1(strcmp('9',classes1))={'ship'};
classes1(strcmp('10',classes1))={'truck'};

Но это не удалось. Он только заменил «10» на «грузовик».

ОБНОВЛЕНИЕ: этот код действительно будет работать. Но в моем случае вместо «1» нужно использовать строки «1» (отсутствовал пробел).

08.04.2014

  • Ваш код работает для меня ... может быть, есть что-то другое в вашем однозначном числе? как ' 1' или '01' например? 08.04.2014
  • Я вижу, позвольте мне проверить это. :D 08.04.2014
  • @Dan: Спасибо, на самом деле я заменил «1» на «1», 2 на «2» и так далее. Это сработало. Должен ли я удалить этот вопрос? 08.04.2014
  • не удаляйте его, ответы по-прежнему помогут вам, поскольку они показывают, как это сделать, не делая этого вручную. 08.04.2014
  • Хорошо, Дэн, я не удаляю его, и ответы полезны. 08.04.2014

Ответы:


1

Используйте это, чтобы расширить свой большой случай -

%%// Create look up and numeral data cell arrays for demo
LOOKUP_CELL_ARRAY = {'airplane','automobile','chopper'};
IN_CELL_ARRAY = num2cell(round(1+2.*rand(10,2)))

%%// Replace the second column of data cell array with corresponding
%%// strings in the look up array
IN_CELL_ARRAY(:,2)= LOOKUP_CELL_ARRAY(cell2mat(IN_CELL_ARRAY(:,2)))

Выход -

IN_CELL_ARRAY = 

    [2]    [2]
    [2]    [2]
    [2]    [1]
    [2]    [2]
    [3]    [1]
    [2]    [3]
    [1]    [1]
    [3]    [3]
    [2]    [2]
    [2]    [3]


IN_CELL_ARRAY = 

    [2]    'automobile'
    [2]    'automobile'
    [2]    'airplane'  
    [2]    'automobile'
    [3]    'airplane'  
    [2]    'chopper'   
    [1]    'airplane'  
    [3]    'chopper'   
    [2]    'automobile'
    [2]    'chopper'
08.04.2014

2

Вы можете сделать это следующим образом с cellfun:

% replacement strings
R = {'airplane','automobile','bird','cat','deer', ...
     'dog','frog','horse','ship','truck'};

% example data
nums = randi(10,100,1);
data(:,1) = num2cell(nums)
data(:,2) = cellstr(num2str(nums))

data = 

    [ 3]    ' 3'
    [ 1]    ' 1'
    [ 1]    ' 1'
    [ 8]    ' 8'
    [ 8]    ' 8'
    [ 8]    ' 8'
    [ 7]    ' 7'
    [ 9]    ' 9'
    [ 1]    ' 1'
    ...

str2double(x) не волнует, является ли это '01' или '1':

% replicate number strings with strings
data(:,2) = cellfun(@(x) R( str2double(x) ), data(:,2) )


data = 

    [ 3]    'bird'      
    [ 1]    'airplane'  
    [ 1]    'airplane'  
    [ 8]    'horse'     
    [ 8]    'horse'     
    [ 8]    'horse'     
    [ 7]    'frog'      
    [ 9]    'ship'      
    [ 1]    'airplane'   
    ...
08.04.2014

3

Вы можете сделать это только с помощью индексации:

data = {'aa' 1
        'bb' 3
        'cc' 2
        'dd' 6
        'ee' 1
        'ff' 5}; %// example data: two-col cell array, 2nd col is numbers
str = {'airplane','automobile','bird','cat','deer', ...
       'dog','frog','horse','ship','truck'}; %// replacement strings

data(:,2) = str(vertcat(data{:,2})); %// do the replacing
08.04.2014
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..