Могу ли я заставить binned_statistic_2d возвращать номера ячеек только для ячеек в диапазоне? - PullRequest
1 голос
/ 06 августа 2020

Binned_statistic_2d автоматически создает интервалы на границах каждого измерения, чтобы улавливать значения вне диапазона, что делает номера интервалов менее полезными, если меня интересуют только значения в пределах моего заданного диапазона. Есть ли способ присвоить номера ячеек только ячейкам в пределах диапазона?

Например:

x = [0.5, 0.5, 1.5]
y = [0.5, 1.5, 1.5]
binx = [0.0, 1.0, 2.0]
biny = [0.0, 1.0, 2.0]

ret = scipy.stats.binned_statistic_2d(x, y, None, "count", bins = [binx, biny])

ret.statistic
ret.binnumber

возвращает

array([[1., 1.],
       [0., 1.]])

array([ 5,  6, 10])

из-за "выходных ячеек" "

  0  |  1  |  2  |  3   
-----+-----+-----+-----
  4  |  5  |  6  |  7  
-----+-----+-----+-----
  8  |  9  | 10  | 11  
-----+-----+-----+-----
 12  | 13  | 14  | 15  

Что я могу сделать, чтобы вместо этого вернуть array([ 0, 1, 3]) и вырезать только интересующие вас подборки?

  0  |  1   
-----+-----
  2  |  3  

Я чувствую, что есть способ сделать это используя expand_binnumbers = True и выполняя некоторые вычисления с индексами x и y, но, может быть, есть более простой способ?

1 Ответ

0 голосов
/ 06 августа 2020

Возвращенные двоичные числа образуют сетку (nx+2)x(ny+2). Желаемые ограниченные бинумера образуют сетку (nx)x(ny).

Если мы рисуем x слева направо и y снизу вверх, нам нужно вычесть:

  • две ячейки для каждого меньшего столбца (одна ячейка вверху и одна внизу) (зеленый)
  • один полный столбец из x (с учетом того, что 2 из этих ячеек были вычтены в предыдущем step) (оранжевый)
  • и, наконец, первая ячейка текущего столбца (желтый).

Это приводит к формуле (с использованием широковещательной рассылки numpy):

ny = len(biny) - 1 # there is one bin less than there are boundaries
restriced_binnumber = ret.binnumber - 2 * (ret.binnumber // (ny+2)) - ny - 1

Следующий обзор иллюстрирует изменение нумерации для nx=4; ny=3 для ячейки с исходным номером 18 (и ограниченным номером 18-6-3-1=8):

обзор

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...