通过 Python 循环从列表数据文件中按经纬度搜索最接近的值并以数组形式保存
Search nearest value by lat-lon from list data files by Python loop for and saved in array form
我尝试以给定的经纬度作为参考搜索 34 个位置的最接近值。一组 30 天的数据文件(由数千个数据组成)以数组形式排列,具有最近的经纬度和所需数据。如何配置lat-lon通过循环的方式找到各自想要的数据并保存到文本文件如下:
预期的输出文本文件:
Lat Lon Date1 Date2 Date3 …………. Date30
1 6.483 100.267 0 ….. ….. ….. …..
2 6.333 99.733 0 ….. ….. ….. …..
3 6.2 100.4 1.237 ….. ….. ….. …..
4 5.457 100.388 0 ….. ….. ….. …..
5 5.35 100.4 0 ….. ….. ….. …..
6 5.297 100.272 0 ….. ….. ….. …..
7 4.221 100.701 0 ….. ….. ….. …..
8 4.567 101.1 2.003 ….. ….. ... …..
9 4.467 101.367 9.161 ….. ….. ….. …..
10 ….. ….. …..
11 ….. ….. …..
. ….. ….. …..
. ….. ….. …..
34 ….. ….. …..
输出中不需要左边的索引
The desired data comes from this files under list files "trmm-0.25"
1. Combine.3B42.20161101.Daily.0.25.dat
2. Combine.3B42.20161102.Daily.0.25.dat
3. Combine.3B42.20161103.Daily.0.25.dat
.
.
30. Combine.3B42.20161130.Daily.0.25.dat
Thousands of desired data for each files are arranged like this :
Lat Lon Desired
-5.000 95.000 9.420
-5.000 95.250 13.470
-5.000 95.500 14.790
-5.000 95.750 12.840
................
9.750 119.750 17.310
9.750 120.000 19.650
10.000 95.000 15.480
10.000 95.250 15.690
我使用的脚本如下:
import numpy as np
#MAIN REFERENCE LAT AND LON
data1=np.loadtxt('location-new.dat')
in_lats1=data1[:,0]
in_lons1=data1[:,1]
#SEARCH CLOSE LOCATION AND FIND RESPECTIVE VALUES IN SEVERAL FILES
files3=np.loadtxt('trmm-0.25',dtype=str)
for x in range(len(files3)):
file = files3[x]
data = np.loadtxt(file)
lats=data[:,0]
lons=data[:,1]
trmm=data[:,2]
ind=[]
for i in range(len(data1)):
dist=(lats-in_lats1[i])**2+(lons-in_lons1[i])**2
ind.append(np.where(dist==np.min(dist))[0][0])
lat2=lats[ind]
lon2=lons[ind]
trmm2=trmm[ind]
data3=np.array([in_lats1,in_lons1,trmm2])
data3=np.transpose(data3)
np.savetxt('Ground-match-trmm-0.25-loop2.dat',data3,fmt='%9.3f')
location-new.dat下给出了34个位置的主要参考如下:
Lat Lon
6.483 100.267
6.333 99.733
6.2 100.4
5.457 100.388
5.35 100.4
5.297 100.272
.
.
.
问题:
输出保存的文本仅在 Date1 出现,在其他日期不出现..
这里确实有 3 个维度的数据(lat-lon、date、trmm),因此第一遍使用三个嵌套的 for 循环而不是两个。您可以根据您的 memory/speed 要求决定哪个是外循环,但我将举一个例子,lat-lon 是外循环,这样您就不必在内存中保留大日期文件正在编写您的输出文件。
在这个例子中,我排除了很多繁重的工作,以专注于您需要从所有日期获取数据的三个嵌套循环迭代。
import numpy as np
result = []
latlons=np.loadtxt('location-new.dat')
for latlon in latlons:
daily_closest_trmms = []
daily_trmm_files =np.loadtxt('trmm-0.25',dtype=str)
for daily_trmm_file in daily_trmm_files:
trmms = np.loadtxt(daily_trmm_file)
closest_trmm = 0
for trmm in trmms:
pass # calculate closest trmm
daily_closest_trmms.append(closest_trmm)
result.append(np.concatenate([latlon, daily_closest_trmms]))
np.savetxt('Ground-match-trmm-0.25-loop2.dat',result,fmt='%9.3f')
我尝试以给定的经纬度作为参考搜索 34 个位置的最接近值。一组 30 天的数据文件(由数千个数据组成)以数组形式排列,具有最近的经纬度和所需数据。如何配置lat-lon通过循环的方式找到各自想要的数据并保存到文本文件如下:
预期的输出文本文件:
Lat Lon Date1 Date2 Date3 …………. Date30
1 6.483 100.267 0 ….. ….. ….. …..
2 6.333 99.733 0 ….. ….. ….. …..
3 6.2 100.4 1.237 ….. ….. ….. …..
4 5.457 100.388 0 ….. ….. ….. …..
5 5.35 100.4 0 ….. ….. ….. …..
6 5.297 100.272 0 ….. ….. ….. …..
7 4.221 100.701 0 ….. ….. ….. …..
8 4.567 101.1 2.003 ….. ….. ... …..
9 4.467 101.367 9.161 ….. ….. ….. …..
10 ….. ….. …..
11 ….. ….. …..
. ….. ….. …..
. ….. ….. …..
34 ….. ….. …..
输出中不需要左边的索引
The desired data comes from this files under list files "trmm-0.25"
1. Combine.3B42.20161101.Daily.0.25.dat
2. Combine.3B42.20161102.Daily.0.25.dat
3. Combine.3B42.20161103.Daily.0.25.dat
.
.
30. Combine.3B42.20161130.Daily.0.25.dat
Thousands of desired data for each files are arranged like this :
Lat Lon Desired
-5.000 95.000 9.420
-5.000 95.250 13.470
-5.000 95.500 14.790
-5.000 95.750 12.840
................
9.750 119.750 17.310
9.750 120.000 19.650
10.000 95.000 15.480
10.000 95.250 15.690
我使用的脚本如下:
import numpy as np
#MAIN REFERENCE LAT AND LON
data1=np.loadtxt('location-new.dat')
in_lats1=data1[:,0]
in_lons1=data1[:,1]
#SEARCH CLOSE LOCATION AND FIND RESPECTIVE VALUES IN SEVERAL FILES
files3=np.loadtxt('trmm-0.25',dtype=str)
for x in range(len(files3)):
file = files3[x]
data = np.loadtxt(file)
lats=data[:,0]
lons=data[:,1]
trmm=data[:,2]
ind=[]
for i in range(len(data1)):
dist=(lats-in_lats1[i])**2+(lons-in_lons1[i])**2
ind.append(np.where(dist==np.min(dist))[0][0])
lat2=lats[ind]
lon2=lons[ind]
trmm2=trmm[ind]
data3=np.array([in_lats1,in_lons1,trmm2])
data3=np.transpose(data3)
np.savetxt('Ground-match-trmm-0.25-loop2.dat',data3,fmt='%9.3f')
location-new.dat下给出了34个位置的主要参考如下:
Lat Lon
6.483 100.267
6.333 99.733
6.2 100.4
5.457 100.388
5.35 100.4
5.297 100.272
.
.
.
问题: 输出保存的文本仅在 Date1 出现,在其他日期不出现..
这里确实有 3 个维度的数据(lat-lon、date、trmm),因此第一遍使用三个嵌套的 for 循环而不是两个。您可以根据您的 memory/speed 要求决定哪个是外循环,但我将举一个例子,lat-lon 是外循环,这样您就不必在内存中保留大日期文件正在编写您的输出文件。
在这个例子中,我排除了很多繁重的工作,以专注于您需要从所有日期获取数据的三个嵌套循环迭代。
import numpy as np
result = []
latlons=np.loadtxt('location-new.dat')
for latlon in latlons:
daily_closest_trmms = []
daily_trmm_files =np.loadtxt('trmm-0.25',dtype=str)
for daily_trmm_file in daily_trmm_files:
trmms = np.loadtxt(daily_trmm_file)
closest_trmm = 0
for trmm in trmms:
pass # calculate closest trmm
daily_closest_trmms.append(closest_trmm)
result.append(np.concatenate([latlon, daily_closest_trmms]))
np.savetxt('Ground-match-trmm-0.25-loop2.dat',result,fmt='%9.3f')