我有一个矩阵,包含地球某个部分的NO2测量值,以及包含纬度和经度的2个相同大小的矩阵。
NO2 = np.random.rand(100,100)
lat = np.random.rand(100,100)*90.
lon = np.random.rand(100,100)*180
我想把这些基于lat和lon的NO2值加到0.125度的箱子里,看起来像这样:
latBins = np.linspace(-90,90,180/.125+1)
lonBins = np.linspace(-180,180,360/.125+1)
现在,我知道numpy.digitize和numpy.histogram可以返回每个NO2值所属的bin的索引,但我想要实际的binned矩阵。该矩阵如下所示:
binnedMatrix = np.zeros((1440,2880,15))
每个bin的深度为15.如果我现在调用binnedMatrix [0] [0](其中包含经度介于-180。, - 179.875之间且纬度介于-90。, - 89.875之间的所有点),我因此希望在这些拉特和隆起中装箱的所有NO2值。这样就可以将这个矩阵存储起来,这就是我想要的。
是否有任何函数返回此矩阵?或者没有for循环可以做到这一点吗?
答案 0 :(得分:0)
我对你想要的东西感到非常困惑。然而,这是我对你所写内容的解释。
g.get_group(('(0.875, 1]', '(83.75, 83.875]'))
NO2 i j lat lon
6968 0.645213 69 68 0.956681 83.754923
8495 0.383437 84 95 0.964288 83.863002
然后我可以抓住一个特定的小组
Validator::extend('empty_when', function ($attribute, $value, $parameters) {
foreach ($parameters as $key) {
if ( ! empty(Input::get($key))) {
return false;
}
}
return true;
});
Validator::replacer('empty_when', function ($message, $attribute, $rule, $parameters) {
$fields = [];
foreach ($parameters as $parameter) {
$fields[] = __('validation.attributes.'.$parameter);
}
return str_replace(':values', implode(', ', $fields), $message);
});
答案 1 :(得分:0)
我遇到了类似的问题,您的last comment似乎也很重要。
假设在具有轴x
,y
和z
的三维空间中的点,我想将所有值z
放在与{{1}相对应的bin中}和x
位置。 This answer使用y
并且对一维数组有效,但可以调整为适合三维数据。
np.digitize
要解决您的问题,请使用In [1]: import numpy as np
In [2]: data = np.random.randint(0, 100, 3000).reshape(-1, 3)
In [3]: data
Out[3]:
array([[59, 94, 85],
[97, 47, 71],
[27, 10, 23],
...,
[48, 61, 87],
[72, 22, 86],
[80, 47, 45]])
In [4]: bins = np.linspace(0, 100, 10)
In [5]: bins
Out[5]:
array([ 0. , 11.11111111, 22.22222222, 33.33333333,
44.44444444, 55.55555556, 66.66666667, 77.77777778,
88.88888889, 100. ])
In [6]: digitized = np.digitize(data[:, 0:2], bins)
In [7]: digitized
Out[7]:
array([[6, 9],
[9, 5],
[3, 1],
...,
[5, 6],
[7, 2],
[8, 5]])
In [8]: data[np.equal(digitized, [6, 9]).all(axis=1)]
Out[8]:
array([[59, 94, 85],
[56, 94, 80],
[63, 97, 73],
[64, 94, 13],
[58, 92, 29],
[60, 97, 53],
[65, 92, 95],
[64, 91, 40],
[59, 92, 93],
[58, 94, 77],
[58, 89, 66],
[60, 89, 19],
[65, 95, 13],
[65, 89, 39]])
In [9]: data[np.equal(digitized, [6, 9]).all(axis=1)][:, 2]
Out[9]: array([85, 80, 73, 13, 29, 53, 95, 40, 93, 77, 66, 19, 13, 39])
。这将检索所有NO 2 值,但每个bin可以获得超过15个值。