2010-09-12 3 views
3

У меня есть большой объем данных для импорта в MATLAB, представляющий местоположение точек в декартовом пространстве. Что из следующего является наиболее обычным для хранения и обработки стандартных данных XYZ ?:Самый обычный метод хранения данных XYZ в MATLAB

ВАРИАНТ # 1

магазин X, Y и Z-координаты в виде отдельного п * 1 векторов (возможно, в пределах структуры?) , Это делает:

  • Plotting проста: plot3(X, Y, Z)
  • Извлечение отдельных точек чуть более запутанным N = [X(i), Y(i), Z(i)]
  • Проходя весь набор точек на функцию расширяет количество различных аргументов для передачи.

ВАРИАНТ # 2

магазин X, Y и Z координат, как один п * 3 вектора.

  • Plotting немного сложнее: plot3(XYZ(:, 1), XYZ(:, 2), XYZ(:, 3))
  • Извлечение отдельных точек проще: N = XYZ(i, :)
  • Проходя весь набор точек легко - просто одна переменная

Исходя из этого, я подозреваю, что второй является более условным.


Однако некоторые данные, которые я буду обработки сложнее, так как она читается в виде сетки, где формат сетки имеет важное значение. Под этим я подразумеваю, что необработанная форма для данных является матрицей n * m * 3, а не матрицей (n * m) * 3. Важным является тот факт, что точка X (i, j) находится рядом с точкой X (i, j + 1). Опять же, представлены два варианта:

ВАРИАНТ # 1

магазин каждый X, Y и Z координат как м матрицы п *.

ВАРИАНТ # 2

магазин все точки в качестве Н * м * 3 матрицы.

я предпочел бы сделать второй здесь, но некоторые варианты, как Plotting стать довольно глупо:

X = XYZ(:, :, 1); 
Y = XYZ(:, :, 2); 
Z = XYZ(:, :, 3); 
plot3(X(:), Y(:), Z(:)); 

У меня есть ощущение, что там должно быть соглашение, для этого, в частности, в видении и графики сообщества.

ответ

3

Я не думаю, что есть какой-либо поистине лучший способ сделать это. Лучший способ для вас - это то, что делает вашу жизнь наиболее удобной.

Если вы сделаете много 3-х участков, и вы предпочитаете переносить данные в одной комбинированной форме, тогда напишите небольшой инструмент plot3d. Установите его, чтобы взять массив nx3 (или структуру, которую вы предпочитаете), затем вызывает plot3, разделяя три столбца.

% ============================= 
function h = plot3d(data,varargin) 
% plots 3-d data (more help is good here) 
h = plot3(data(:,1),data(:,2),data(:,3),varargin{:}); 
if nargout == 0 
    clear h 
end 
% ============================= 

Я бы добавил некоторые дополнительные проверки ошибок в форме данных и гораздо лучшую помощь, но вы должны получить общую идею.

Лично мне нравится переносить 3-мерные данные вокруг одного массива nx3. Для других типов вещей, ИМХО, структура лучше. Например, для меня имеет смысл набивать как вершины, так и информацию тесселяции из триангуляции delaunay в одну структуру.

Разверните matlab, чтобы работать с вами, работать так, как вы работаете, способом, который вам нравится думать.

+0

Спасибо, я взял это на борту. Я считаю, что структура является хорошим советом, и теперь я использую их для хранения матрицы XYZ и «битов», связанных с точками данных. –

0

В ответ на первую половину вашего вопроса сохранение матрицы n x 3 (или 3 x n) проще, поскольку она делает синтаксис математической матрицы тривиальной и более эффективной. В общем, вы, вероятно, будете делать много математических операций, а затем немного логики отображения в конце, поэтому я не буду беспокоиться о однократном преобразовании, которое вам нужно сделать, чтобы позвонить, например. plot3.

Что касается второй половины вашего вопроса, я не уверен, что вы подразумеваете под «сеткой», поэтому я не могу ответить на это!

+0

Спасибо, я так думал. Я попытался прояснить вторую часть вопроса. (Как в сторону, какая из n x 3 или 3 x n более условна?) –

0

Я только что подумал о второй половине моего вопроса. Если я хранить данные в виде матрицы 3 xnxm (вместо nxmx 3), он делает много операций проще:

  • Индивидуальные координаты могут быть извлечены с N(:, i, j)
  • Всех X, Y или Z координаты могут быть экстрагируют в качестве вектора с N(1, :), N(2, :) или N(3, :)
  • Все данные могут быть переданы в функцию сразу
  • Это сохраняет исходный формат данных.
  • я могу быть преобразованы в 3-х (п * м) матрица легко с N(:, :)

Это кажется как подходящее решение?

+0

Stack Overflow - не классический форум, не публикуйте здесь этот материал, но отредактируйте свой оригинальный вопрос, пожалуйста! – Mikhail

+0

Да, я понимаю это - я тщательно рассмотрел, где разместить это сообщение, но поскольку это потенциальный ответ на мой собственный вопрос, я подозревал, что в разделе ответов будет лучше. Или мне не разрешено отвечать на мой вопрос? –