numpy np.searchsorted在netCDF4阵列上无法正常工作

7qhs6swi  于 12个月前  发布在  Etcd
关注(0)|答案(1)|浏览(125)

np.searchsorted没有找到正确的索引,但我认为这与数据类型有关。
在我看来,这个函数不能区分float和strs,但我不能将数组转换为float。

coord=Dataset(r"C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\coordenadas.nc",'r')
 lat=coord.variables\['latitude'\]
 lon=coord.variables\['longitude'\]
 lat=np.array(lat,dtype=float)
 lon=np.array(lon,dtype=float)

这会返回错误:

Traceback (most recent call last):

File "c:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\extract.py", line 41, in \<module\>

lat=np.array(lat,dtype=float)

^^^^^^^^^^^^^^^^^^^^^^^^^

TypeError: Variable.__array__() takes no arguments (1 given)

当我试图将我正在搜索的元素变成一个float时:

coord=Dataset(r"C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\coordenadas.nc",'r')
 lat=coord.variables\['latitude'\]
 lon=coord.variables\['longitude'\]
 x0=np.searchsorted(lat,float(x))
 y0=np.searchsorted(lon,float(y))

这并没有给予我一个错误,但给了我最后一个可能的索引,这是不正确的,我注意到的是,对于负元素,这最后一个方法工作得很好。

wvt8vs2t

wvt8vs2t1#

如果你得到错误TypeError:Variable.array()没有参数(给定1个),这可能是因为你没有在变量对象后面放[:]。
关于代码片段的第二部分,看起来您试图使用np.searchsorted函数来查找latlon数组中分别最接近给定值xy的值的索引。但是,np.searchsorted函数期望输入数组按升序排序,因此在调用np.searchsorted之前,应确保latlon已排序。或者,您可以使用np.argmin函数来查找latlon中分别最接近xy的元素的索引:

coord = Dataset(r"C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\coordenadas.nc", 'r')
lat = coord.variables['latitude'][:]
lon = coord.variables['longitude'][:]
x0 = np.argmin(np.abs(lat - float(x)))
y0 = np.argmin(np.abs(lon - float(y)))

请注意,我将[:]添加到latlon的末尾,以将它们的值提取为NumPy数组,而不是netCDF4变量。

相关问题