Öklid Uzunluk Formülünü Python ile kodlamak

Elimde şöyle bir formül var:
image
Bu bildiğimiz öklid uzunluk formülü.
Mesela şöyle bir:
image
iki seri girdiğim zaman, yani:
x1=[4,6,5,10,11]
x2=[2,4,1,6,8]

Bu iki seri den oluşan bir data framede, yukarıdaki formül şu işlemi gerçekleştiriyor:
1.satırdaki x1 değerini x2den çıkarıp karesini alıyor; aynı şeyi y1-y2 ile de yapıyor. Ardından karesi alınan iki işlemi topluyor ve bu toplamın da karekökünü alıyor. Ve bu işlemi her satır için sırayla yapıyor. Bu işlemi nasıl kodlayabilirim ve çıktıları alabilirim?
Sonuç olarak şöyle bir matris alıyoruz şu işlemden:
image
Burada köşegendeki değerler yazılma gereği duyulmamış çünkü 0 oluyor. Diğer üst eşalon kısmı da simetrik olduğu için gerek duyulmamış.

Benim ihtiyacım olan kısım, bu son matristeki değerleri tek tek alıp bir listeye kaydetmek. Bu fonksiyonu kurmamda yardımcı olursanız sevinirim.

Aslında burada tek bir püf nokta var. Ve ona ulaşsam bu formülü bir fonksiyon olarak kurmam mümkün. İhtiyacımız olan şey şu:
x1=[4,6,5,10,11]
x2=[2,4,1,6,8]
bu iki seride
x1[0]-x1[1]
x1[0]-x1[2]
x1[0]-x1[3]
x1[0]-x1[4]
x1[1]-x1[2]
x1[1]-x1[3]
x1[1]-x1[4]
x1[2]-x1[3]
x1[2]-x1[4]
x1[3]-x1[4]

ve bunun bir de X2 için olan halini, mesela girilen eş sayıda iki seriye uygun bir şekilde yineleyecek(yani iadesiz eşleşmeler yapacak) bu çıkarma ve kare işlemlerini yapacak bir algoritma yaratmak, en büyük problemi çözecektir.

Merhaba,

Şöyle yapabilirsiniz herhalde:

def sub(arr):
    return [arr[0] - i for i in arr[1:]] + sub(arr[1:]) if arr else []
        
             
def square(arr):
    return [i ** 2 for i in arr]
    
    
def sum_arr(arr1, arr2):
    return [i + j for i, j in zip(arr1, arr2)]
    
    
def square_root(arr):
    return [i ** 0.5 for i in arr]
    
    
x1 = [4, 6, 5, 10, 11]
x2 = [2, 4, 1, 6, 8]

x = square_root(sum_arr(square(sub(x1)), square(sub(x2))))
print(x)

“Sen, çölüme yağmur oldun… Sen geceme gündüz oldun…”(Yazdığını okuduktan sonra ilk saniyelerde aklıma bu geldi allah da seni mutlu etsin abi)

2 Beğeni

numpy de şöyle bir şey var.

Kesinlikle sen de teşekkürü hakkediyorsun. Fakat ben En Yakın Komşu üzerine çalıştığım ve onun en kolay yolunu bulduğum için, bana bu kısmın algoritmik mantığı lazımdı. Abi verdi sağolsun. Ama sana da çok teşekkürler.

Bu arada kodu kısaltmamız gerekiyor, çünkü gereksiz yere for döngülerini bir kaç kez kullanıyoruz. Yukarıdaki örneği, kod açık seçik olsun diye yazmıştım. Kodu şu şekilde kısaltabilirsiniz.

def sub(arr):
    return [arr[0] - i for i in arr[1:]] + sub(arr[1:]) if arr else []
    
    
def solution(arr1, arr2):
    return [(i ** 2 + j ** 2) ** 0.5 for i, j in zip(arr1, arr2)]
    
    
x1 = [4, 6, 5, 10, 11]
x2 = [2, 4, 1, 6, 8]

x = solution(sub(x1), sub(x2))
print(x)
4 Beğeni

Çözüm yöntemlerinden, kullanıcı ismine kadar beyle orijinal bir mentor daha görmedim. Var olsun yoldaşlar.

Hahahhaha öyle diyince ben de merak ettim nickin anlamını mümkünse bu nickin anlamını paylaşabilir misiniz? @dildeolupbiten

Hangi dili kullanırsak kullanalım, her olguya karşılık düşen bir kelimemiz veya bir kavramımız olmamasına rağmen, içinde yaşadığımız dünyayı, kendimizi, insanları, toplumu, değerleri, düşünceleri, duyguları, -doğru veya yanlış bir şekilde- dil ile anlamaya ve anlatmaya çalışırız. Başka bir deyişle, dil şeyleri resmetme aracıdır ancak şeylere, onları sınırlandıran bir çerçeve de çizer. Çünkü dünyayı dil ile tam da olduğu gibi anlayamaz ve anlatamayız, aksine biz nasıl isek, dünyayı da öyle anlar ve öyle anlatırız. Dünyayı resmetmek için ne yeterli sayıda kelimemiz, ne de deneyimimiz vardır; her anlatım eksiktir. Ancak biz yine de bu dili kullanarak dünyayı tasvir ederiz.

Dilimin sınırları dünyamın da sınırlarıdır.

Yukarıdakine benzer düşünceleri yoğun olarak düşündüğüm bir dönemde, Wittgenstein’dan aldığım ilhamların da etkisiyle, aklıma dildeolupbiten gelmişti. Aslında aklıma ilk olarak dildeolupbitenşeyler gelmişti ama dildeolupbiten olarak kısaltmıştım.

4 Beğeni

Abi, biz seni programcı/yazılımcı sanıyorduk; içinden bir filozof çıktı. :smile:

Aslında şakayla karışık söylediğiniz söz de felsefi bir soruna yol açıyor. Çünkü insanın kendi gözünden kendisini değerlendirmesi ile başkalarının gözünden kendisini değerlendirmesi arasında bir fark oluşuyor ve sonra da kendimize “ben kimim, neyim” sorusunu sorarken bulabiliyoruz.

3 Beğeni

Bir insan Alman Literatüründe ismi geçen bir kişiden bahsediyorsa, hayatında mutlaka anlamlı, dolu bir şeyler vardır.

Belki de yoktur, belki sadece öyle görünmek istiyordur. Belki onaylanmak, alkışlanmak, saygın birisi olarak görülmek istiyordur.

Bu da doğru, ama Alman Felsefesine biraz girip karıştırmış biri olarak söyleyebilirim ki, öyle bile olsa vardır bir şeyler… Zaten kimse mükemmel değildir. Hepimiz aynı ortamın güzel ve kötü yanlarını biraz taşıyoruz. Yapcak bir şey yok…

“Şey” olarak vardır, let thing = undefined;

things have changed şarkısını armağan ediyorum sana Bob Dylan’dan.

Teşekkür ederim. Dinliyorum şimdi.

1 Beğeni