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 img
indekslerle 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.T
her 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)