У меня есть две матрицы с географической привязкой (сетевые наборы климатических данных) с разным пространственным экстентом и разрешением (т. Е. Пространственное покрытие одним пикселем на поверхности Земли), к которому я хотел бы присоединиться.Давайте назовем их referenceMatrix
и targetMatrix
.Матрицы могут быть загружены в MATLAB как геотарифы или просто матрицы с соответствующими сетками широт / долгот на пиксель.
Я хочу заполнить NaN
-пиксели в targetMatrix
соответствующим значением из referenceMatrix
.Я могу сделать это с помощью for
-петля, который просматривает пиксели один за другим и заполняет NaN
в targetMatrix
данными из referenceMatrix
на основе ближайшего пикселя.Метод, который я использую для локализации ближайшего пикселя в пространстве, описан здесь:
Как найти ближайшие точки к заданным координатам с помощью MATLAB?
Однако мне нужно сделать это стысячи матриц, а for
-loop слишком медленный.Поэтому я хотел бы использовать логическое индексирование, например
targetMatrix(isnan(targetMatrix)) = referenceMatrix(isnan(targetMatrix))
с добавленной возможностью сопоставлять пиксели в матрицах на основе их широты и долготы.Кто-нибудь из вас может указать мне пример сравнения матриц с разной степенью в зависимости от их географической привязки?
Пример входных данных и требуемого вывода ниже
targetMatrix = [1, NaN, 3;
NaN, 5, 6];
referenceMatrix = [10, 20, 30, 40;
50, 60, 70, 80];
referenceLatitude = [13.3, 13.3, 13.3, 13.3;
14.1, 14.1, 14.1, 14.1];
referenceLongitude = [3.2, 4.2, 5.2, 6.2;
3.2, 4.2, 5.2, 6.2];
targetLatitude = [13.4, 13.4, 13.4;
13.9, 13.9, 13.9];
targetLongitude = [3.1, 3.6, 4.1;
3.1, 3.6, 4.1];
wantedOutput = [ 1, 10, 3;
50, 5, 6];
Требуемый вывод состоит из исходных значений из targetMatrix
, где NaN
s заполнены ближайшими (в пространстве) значения из referenceMatrix
, т. е. 10
и 50
.