2013-05-23 1 views
1

У меня есть матрица с данными о населении и вектор, который ссылается на каждый тип данных, возраст, страну, пол, рост, этническую принадлежность. Мне нужно в части кода использовать эти строки как char 1x1. Я thougnt в создании какое-то отношение, какMatlab - как я могу обозначить переменные?

variables = {'age', 'a'; 
      'gender', 'b'; 
      'country', 'c'; 
      'height', 'd'; 
     'ethnicity', 'e'}; 

Я хотел бы кое-что в любое время я использую leters, «A», «B», «C», «D» или «е», код понимает, что Я хочу использовать «возраст», «пол», «страна», «высота» или «этничность» соответственно.

Как я могу это сделать? спасибо!

+0

Похоже, вы можете использовать класс ['dataset'] (http://www.mathworks.com/help/stats/dataset.html) из панели инструментов статистики – Amro

+0

У меня нет инструментария в моем пакете matlab:/ –

+0

Класс 'dataset' - это не что иное, как удобная обертка вокруг массивов ячеек, которая позволяет индексировать более удобное отображение и сопоставление для извлечения столбцов по имени (плюс несколько других полезных функций). Вы могли бы сделать это сами. Но во-первых, можете ли вы описать свою матрицу данных и сохраненные типы – Amro

ответ

4

У вас есть два варианта:

Более распространенным методом является использование структуры:

codes.a = 'age'; 
codes.b = 'gender'; 
... 

Так в любое время вам нужен код, просто получить значение эквивалентного элемента структуры:

character_you_typed = 'a'; 
getfield(codes, character_you_typed) 

или (на основе комментариев @Amro «s ниже):

codes.(character_you_typed) 

Этот метод не ограничивает вас символами одного символа. Другой способ заключается в использовании недавно добавленный контейнер карты с ключом «полукокса»:

codes = containers.Map('KeyType', 'char'); 
codes('a') = 'age'; 
codes('b') = 'gender'; 
... 

Тогда:

character_you_typed = 'a'; 
codes(character_you_typed) 

Второй метод выглядит намного лучше, но, к сожалению, вы ограничены одним иероглифом ключи.

+2

для первого варианта вы также можете использовать имена динамических полей: 'codes. ('A')'. Третий вариант заключается в том, чтобы вручную поддерживать сопоставление с использованием массивов ячеек и поиска строк для извлечения соответствующих кодов. – Amro

+0

@ Большое спасибо за имена динамических полей. Я добавил это к моему ответу. Благодаря! – Bee

+0

btw-карты не ограничены отдельными символами: 'container.Map ({'aa', 'bb'}, {'age', 'gender'})' – Amro

Смежные вопросы