Эквивалент функции 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 для большего.

Другие вопросы по тегам