ด้วยรูปร่าง 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
เพื่อรับดัชนี bin สำหรับแต่ละค่าใน 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
ได้อย่างไร ฉันไม่อยากทำฮิสโตแกรม 2 มิติ - person Peter Prettenhofer   schedule 19.09.2013np.histogramdd
- person Jaime   schedule 19.09.2013