учитывая np.array формы (n_days, n_lat, n_lon)
, я хотел бы вычислить гистограмму с фиксированными ячейками для каждой ячейки lat-lon (т.е. распределение ежедневных значений).
Простое решение проблемы — пройтись по ячейкам и вызвать np.histogram
для каждой ячейки::
bins = np.linspace(0, 1.0, 10)
B = np.rand(n_days, n_lat, n_lon)
H = np.zeros((n_bins, n_lat, n_lon), dtype=np.int32)
for lat in range(n_lat):
for lon in range(n_lon):
H[:, lat, lon] = np.histogram(A[:, lat, lon], bins=bins)[0]
# note: code not tested
но это довольно медленно. Есть ли более эффективное решение без цикла?
Я заглянул в np.searchsorted
, чтобы получить индексы бинов для каждого значения в B
, а затем использовал причудливую индексацию для обновления H
::
bin_indices = bins.searchsorted(B)
H[bin_indices.ravel(), idx[0], idx[1]] += 1 # where idx is a index grid given by np.indices
# note: code not tested
но это не работает, потому что оператор добавления на месте (+=), похоже, не поддерживает несколько обновлений одной и той же ячейки.
спасибо, Питер
a[idx] += 1
не будет таким же, какa[idx] = a[idx] + 1
. - person Peter Prettenhofer   schedule 17.09.2013np.histogram2d
с аргументом ключевого словаweights
. - person Jaime   schedule 17.09.2013weights
? Я не хочу делать двумерную гистограмму. - person Peter Prettenhofer   schedule 19.09.2013np.histogramdd
. - person Jaime   schedule 19.09.2013