MATLAB: 2D-данные в 3D! Как? - PullRequest
       0

MATLAB: 2D-данные в 3D! Как?

0 голосов
/ 18 февраля 2020

У меня есть 34200 x 4 таблица. В этой таблице показано месячное количество pr (осадков) за 30 лет в некоторых широтах и ​​долготах. Таким образом, столбцы lat, lon, date и pr. Я хочу преобразовать его в 3D-матрицу, которая longitude x latitude x month. Я прикрепляю свой стол. Подскажите пожалуйста как это сделать я новичок. Если я не хочу конвертировать его по месяцу, который мог бы, но этот вопрос настолько сложен для меня. Пожалуйста, посмотрите на мою таблицу, это всего 235 КБ. Я загружаю ее в свой DropBox, поэтому, пожалуйста, нажмите Открыть в правом верхнем углу и нажмите "Загрузить".

Вот мое изображение

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Изучая ваши данные, ваши значения широты и логики фактически представляют 95 уникальных местоположений, которые кажутся случайными. Вы можете видеть это на рисунке ниже.

length(unique(C.lat)) % 95
length(unique(C.lon)) % 95
scatter(C.lat, C.lon)

enter image description here

Если бы места располагались в сетке, было бы разумно использовать lat и lon как оси матрицы данных. Но вместо этого лучше использовать только одну ось, представляющую уникальные местоположения. Затем у вас останется вторая ось, представляющая дату.

length(unique(C.date)) % 360
360 * 95 % 34200 - the number of values we have

Переформатирование данных

Поэтому я бы сохранил данные в двумерной матрице следующим образом.

locations_lat = unique(C.lat, 'stable');
locations_lon = unique(C.lon, 'stable');
dates = unique(C.date, 'stable');
data = reshape(C.pr, length(dates), length(locations_lat)); % size 360 x 95

Затем, чтобы убедиться, что это сработало, выберите случайный пример.

location_num = 27;
date_num = 242;
lat = locations_lat(location_num) % 14.68055556
lon = locations_lon(location_num) % 65.23111111
date = dates(date_num) % 2/1/2009
precipitation = data(date_num, location_num) % 16.7179

Поиск этой позиции и даты в оригинальной сказке дает:

9602|   14.6805555600000    65.2311111100000    '2/1/2009'  16.7179000000000
0 голосов
/ 18 февраля 2020

Если A - это ваши данные с 4 столбцами [34200x4], то вы можете создать трехмерную матрицу, подобную этой:

B = zeros(len(A),3)
B(:, 1) = A(:, 1)
B(:, 2) = A(:, 2)
B(:, 3) = A(:, 3)

Возможно даже:

B(:,1:3) = A(:, 1:3)

В зависимости от того, как заданы ваши данные, вам может понадобиться транспонировать:

B = 'B

Вы можете отобразить данные, если измерения совпадают.

Вы можете реализовать a для l oop если у вас есть еще больше столбцов или для динамических c записей данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...