diberi np.array bentuk (n_days, n_lat, n_lon)
, saya ingin menghitung histogram dengan bin tetap untuk setiap sel lat-lon (yaitu distribusi nilai harian).
Solusi sederhana untuk masalah ini adalah dengan mengulang sel dan memanggil np.histogram
untuk setiap sel ::
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
tapi ini cukup lambat. Apakah ada solusi yang lebih efisien yang tidak melibatkan perulangan?
Saya memeriksa np.searchsorted
untuk mendapatkan indeks bin untuk setiap nilai di B
dan kemudian menggunakan pengindeksan mewah untuk memperbarui 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
tetapi ini tidak berhasil karena operator tambah yang ada (+=) tampaknya tidak mendukung beberapa pembaruan pada sel yang sama.
terima kasih, Petrus
a[idx] += 1
tidak akan sama dengana[idx] = a[idx] + 1
. - person Peter Prettenhofer   schedule 17.09.2013np.histogram2d
dengan argumen kata kunciweights
. - person Jaime   schedule 17.09.2013weights
? Saya tidak ingin melakukan histogram 2d. - person Peter Prettenhofer   schedule 19.09.2013np.histogramdd
. - person Jaime   schedule 19.09.2013