使用Numpy在2个2-d阵列上的位置

时间:2015-12-06 06:48:14

标签: python numpy where

我正在尝试此代码,但我在这个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返回

>>>sfocoord
array([204, 204, 205, 205, 145, 146, 145, 146])

纬度和经度均为尺寸(428,614)。我想找到位于/大约37.6189,-122.3750的位置 我想输入要更改的内容,因此代码可以正常工作。

1 个答案:

答案 0 :(得分:1)

numpy.where将返回长度为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]])