在 2 个二维数组上使用 Numpy Where
Using Numpy Where on 2 2-d arrays
我正在尝试这段代码,但我在这个 Numpy Where 部分遇到了问题:
import numpy as N
....
....
sfolat = N.ravel(N.where((lat>37.5689) & (lat<37.6689)))
sfolon = N.ravel(N.where((lon>-122.4250) & (lon<-122.3250)))
sfocoord = N.ravel(N.where((lat>37.5189) & (lat<37.7189)&(lon>-122.4750) & (lon<-122.2750)))
sfocoord returns
>>>sfocoord
array([204, 204, 205, 205, 145, 146, 145, 146])
纬度和经度的尺寸均为 (428,614)。我正在尝试查找位置 at/around 37.6189,-122.3750
我想输入要更改的内容,这样代码就可以工作了。
numpy.where
将 return 一个长度为 2 的元组,其中 2 个元素是:行的索引数组和满足条件的列的相应索引数组。
numpy.ravel
会将 2 个数组的元组展平为一个数组,您将不再有 2 个不同的行索引和列索引数组。
要保留索引:
idx = numpy.where((lat>37.5689) & (lat<37.6689)&(lon>-122.4250) & (lon<-122.3250))
根据您给定的 sfocoord
输出,您的代码可能会输出
>>>idx
(array([204, 204, 205, 205]), array([145, 146, 145, 146]))
[204, 204, 205, 205]
是行索引,[145, 146, 145, 146]
是满足条件的相应列索引。
要使用这些索引从 lat 数组中获取值,您可以执行以下操作:
lat[idx[0], idx[1]]
编辑:一种将索引视为行、列对的方法:
>>>numpy.transpose(idx)
array([[204, 145],
[204, 146],
[205, 145],
[205, 146]])
我正在尝试这段代码,但我在这个 Numpy Where 部分遇到了问题:
import numpy as N
....
....
sfolat = N.ravel(N.where((lat>37.5689) & (lat<37.6689)))
sfolon = N.ravel(N.where((lon>-122.4250) & (lon<-122.3250)))
sfocoord = N.ravel(N.where((lat>37.5189) & (lat<37.7189)&(lon>-122.4750) & (lon<-122.2750)))
sfocoord returns
>>>sfocoord
array([204, 204, 205, 205, 145, 146, 145, 146])
纬度和经度的尺寸均为 (428,614)。我正在尝试查找位置 at/around 37.6189,-122.3750 我想输入要更改的内容,这样代码就可以工作了。
numpy.where
将 return 一个长度为 2 的元组,其中 2 个元素是:行的索引数组和满足条件的列的相应索引数组。
numpy.ravel
会将 2 个数组的元组展平为一个数组,您将不再有 2 个不同的行索引和列索引数组。
要保留索引:
idx = numpy.where((lat>37.5689) & (lat<37.6689)&(lon>-122.4250) & (lon<-122.3250))
根据您给定的 sfocoord
输出,您的代码可能会输出
>>>idx
(array([204, 204, 205, 205]), array([145, 146, 145, 146]))
[204, 204, 205, 205]
是行索引,[145, 146, 145, 146]
是满足条件的相应列索引。
要使用这些索引从 lat 数组中获取值,您可以执行以下操作:
lat[idx[0], idx[1]]
编辑:一种将索引视为行、列对的方法:
>>>numpy.transpose(idx)
array([[204, 145],
[204, 146],
[205, 145],
[205, 146]])