Python 2 boyutlu dizi belirli endekslerin toplamı
Bunun gibi 2 boyutlu bir dizi var:
img = [
[[1, 2, 3], [4, 5, 6], [7, 8, 9]],
[[2, 2, 2], [3, 2, 3], [6, 7, 6]],
[[9, 8, 1], [9, 8, 3], [9, 8, 5]]
]
Ve sadece şuna benzer bazı endekslerin toplamını elde etmek istiyorum:
indices = [[0, 0], [0, 1]] # which means img[0][0] and img[0][1]
# means here is represents
Bu bağlantıda stackoverflow'da 1-d dizisi hakkında benzer bir soru vardı , ancak kullanmaya çalıştığımda hata aldı print(img[indices]). Çünkü, öğesinin imgindekslerle gösterilenler olduğunu açıklığa kavuşturmak ve ardından anlamına gelmek toplamı.
Beklenen çıktı
[5, 7, 9]
Yanıtlar
NumPy'yi kullanın:
import numpy as np
img = np.array(img)
img[tuple(indices)].sum(axis = 0)
#array([5, 7, 9])
Sonuç, listenin sütununun toplamı olan [5, 7, 9] olursa. O zaman kolay:
img = np.asarray(img)
indices = [[0, 0], [0, 1]]
img[(indices)].sum(axis = 0)
Sonuç:
array([5, 7, 9])
Süslü bir dizin sağladığınızda, dizin dizisinin her bir öğesi farklı bir ekseni temsil eder. İndeks dizilerinin şekli, aldığınız çıktının şekline göre yayın yapar.
Sizin durumunuzda, satırları indices.Ther eksendeki endekslerdir. Bunları bir dizin demetine dönüştürebilir slice(None)ve programatik eşdeğeri olan ekleme yapabilirsiniz :. Ortaya çıkan 2D dizinin ortalamasını doğrudan alabilirsiniz:
img[tuple(indices.T) + (slice(None),)].sum(0)
Başka bir yol da uyarıcı operatörünü kullanmaktır:
img[(*indices.T, slice(None))].sum(0)