是否有任何binning函数返回'binned matrix'而不是每个点的bin索引?

时间:2017-02-22 08:01:02

标签: python pandas numpy matrix

我有一个矩阵,包含地球某个部分的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循环可以做到这一点吗?

2 个答案:

答案 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似乎也很重要。

假设在具有轴xyz的三维空间中的点,我想将所有值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个值。