我的数据集有3列 - 经度,纬度和数据 - 以及64800行。
Lon Lat Data
-180.0 -90.0 0.0
-180.0 -89.0 1500.0
-180.0 -88.0 18.5
等...
我想编辑某些地理区域的数据列,例如当经度介于-30和70之间,纬度介于35和70之间时。
我尝试使用for循环和if语句(下面的代码),并在条件满足时执行操作。
for myline in infile:
mylon = f[:,0]
mylat = f[:,1]
mydata = f[:,2]
if (0 < myLon < 30) and (30 < myLat < 50):
mydata = mydata*1.2
但后来出现了这个错误;
ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()
我现在使用np.logical_and和.all()来处理数组,但现在当我使用'.all()'时,条件不会应用于数据。如果我尝试'.any()',则该操作仅应用于所有数据,而不仅仅是匹配其他两列中的条件。我没有收到任何错误。
任何有关我错过或建议的想法都将不胜感激! 谢谢。
以下完整代码。
import numpy as np
filepath = 'filepath'
filen = filepath+'infile'
f = np.loadtxt(filen,skiprows=1)
outfile = 'outfile'
for myline in infile:
mylon = f[:,0]
mylat = f[:,1]
mydata = f[:,2]
if (np.logical_and((-30<mylon),(mylon<70)).all()) and (np.logical_and((35<mylat),(mylat<70)).all()):
mydata = mydata*1.2
np.savetxt(outfile,np.c_[mylon,mylat,mydata], fmt='%13.3f'*2+'%16.2f')
答案 0 :(得分:0)
试试这个:
f = np.array([[-180., -90., 0.], [-180., -89., 1500.], [-180., -88., 18.5]])
lon_rng = (-181 < f[:, 0]) & (f[:, 0] < -179)
lat_rng = (-90 < f[:, 1]) & (f[:, 1] < -88)
f[lat_rng & lon_rng, 2] = f[lat_rng & lon_rng, 2] * 1.2
f
array([[ -180. , -90. , 0. ],
[ -180. , -89. , 1800. ],
[ -180. , -88. , 18.5]])