Эквивалент функции Fieldnames для ячеек
Как следует из названия, просто интересно, есть ли функция, которая работает как имена полей (http://www.mathworks.co.uk/help/matlab/ref/fieldnames.html), но для ячеек.
Так что, если у меня есть что-то вроде:
a = imread('redsquare.bmp');
b = imread('bluesquare.bmp');
c = imread('yellowsquare.bmp');
d = imread('greysquare.bmp');
e = {a, b, c, d};
Я пытаюсь получить либо: a, b, c, d ИЛИ имя изображения без расширения.
я пытался fn = fileparts(e)
а также fntemp = cell2struct(e,2)
, но я не могу заставить его работать.
Надеюсь, что это имеет смысл Спасибо
1 ответ
Массив ячеек не содержит никакой мета-информации, такой как имя поля или имя файла. Если вы хотите получить доступ к этой информации, вам нужно изменить структуру хранения данных. Некоторые варианты включают в себя:
Скалярная структура Хорошо подходит для случаев, когда нужно указать одно имя.
images.red = imread('redsquare.bmp');
images.blue = imread('bluesquare.bmp');
использование fieldnames(images)
чтобы получить имена.
Массив структур Немного более общий. Позволяет использовать полностью общие имена (включая специальные символы и пробелы) и дополнительные метаданные, если они вам нужны (например, "размер", "автор")
images(1).name = 'red';
images(1).im = imread('redsquare.bmp');
images(2).name = 'blue';
images(3).im = imread('bluesquare.bmp');
использование {fieldnames.name}
чтобы получить только имена.
Containers.map Наверное, больше, чем нужно, но полезно знать. help comtainers.map
для большего.