Gelişmelerden haberdar olmak için e-posta adresinizi giriniz.
Bu yazıda sizin için aşağıdaki soruları yanıtlamaya çalıştım. Keyifli okumalar!
Her gün yeni bir yapay zeka ürünü ortaya çıkıyor ve teknolojilerin kontrolümüzden çıkıp gittiğini hissediyoruz. Geçen hafta öğrendiğimiz bilgiler bu hafta eskimiş hale geliyor. Peki yapay zeka çağında öğrenme sürecimizi nasıl şekillendirmeliyiz? Konuları derinlemesine öğrenmeli miyiz? Özellikle programlama gibi birçok yapı ve kavramı hatırlamayı gerektiren alanlarda, yeni bir teknoloji veya kütüphaneyi öğrenirken nasıl bir yaklaşım benimsemeliyiz? Eskiden olduğu gibi her bir deseni ve kavramı ayrıntılı öğrenip bunların uygulamalarını aklımızda tutmalı mıyız? Gelin bu sorulara bir konuyu birlikte öğrenerek yanıt bulmaya çalışalım.
Her bir ayrıntıyı akılda tutmaya çalışmanın artık doğru bir yaklaşım olduğunu düşünmüyorum. Ancak "hiçbir şey bilmeden sadece konuşarak kod yazabiliyorum" veya "bir konuyu tamamen yapay zekaya sorarak öğrenebilirim" demek de gerçekçi değil. Bu iki uç yaklaşımın ortasını bulmamız gerekiyor. Geleneksel öğrenme yöntemleri artık geride kaldı. Öğrenme sürecimizi yeniden değerlendirmeli, kullanışsız yöntemleri elemeli ve geliştirilmeye açık olanları iyileştirmeliyiz.
Başlıktan da anlaşılabileceği üzere bugün birlikte numpy öğreneceğiz. En baştan belirtmeliyim ki bu yazıda herhangi bir reklam yoktur. Notion, NotebookLM veya diğer markalar sponsor değildir. Tamamen kendi deneyimlerimi aktarıyorum.
Öncelikle YouTube üzerinde "crash course"ları araştırmaya başlıyorum. Bu kurslardan en çok "cheatsheet" gibi görüneni seçiyorum.
Bu durumda çalıştığım video: https://www.youtube.com/watch?v=vrDPtxnSWos
Notion'a giderek çalıştığım konu başlığında bir sayfa açıyorum. Notion not alma ve bilgi organizasyonu için mükemmel bir araç.
NotebookLM'e giderek aynı şekilde çalıştığım konu başlığında bir sayfa açıyorum. NotebookLM içerisine youtube videosunun linkini vermeyi ihmal etmiyorum.
Bu videoların genellikle uzunluğu bir saat civarında oluyor. Evet, bir saatte uzman olamayacağımın farkındayım — sonuç kısmında bu konuya da değineceğiz. Videoyu izlerken yanımda IDE açık olarak, öğrendiklerimi pratik yaparak ilerliyorum. Anlamadığım bir nokta olduğunda ChatGPT, Grok veya Gemini'den yardım alıyorum (bazen üçünü birden kullanıyorum 🤭). Örneğin, numpy.sum() fonksiyonunda axis parametresini anlamakta zorlanıyorsam, "numpy.sum() fonksiyonunu ayrıntılı bir şekilde açıkla ve 5 örnek ver. axis kullanımını özellikle belirt." şeklinde bir soru soruyorum. Aldığım yanıtlardaki farklı örnekler sayesinde konuyu daha iyi kavrayabiliyorum.
Son zamanlarda fark ettim ki dil modelleri önce İngilizceye çeviri yapıp sonra düşünme işlemini tamamlıyor, bu yüzden sorularımı Türkçe yazmayı tercih ediyorum. Özellikle mantık yürütme odaklı modeller, bilginin en zengin olduğu dile çeviri yapıp düşündükten sonra Türkçe yanıt veriyor. Aldığım yanıtları Notion'daki sayfama yeni başlıklar altında ekliyorum — örneğin "Numpy sum Fonksiyonu" başlığı altında LLM'in ürettiği bilgiyi yapıştırıyorum. Bu yöntemi karşılaştığım her sorun için uyguluyorum. Bazen internet üzerindeki kaynaklara da başvuruyorum ve bu sayfaları NotebookLM'e kaynak olarak ekliyorum. Kendi notlarımı da Notion üzerine alıyorum. Peki neden hem Notion hem NotebookLM'i birlikte kullanıyorum? Çünkü Notion yazı düzenleme konusunda çok gelişmiş ve dil modellerinin ürettiği sözdizimini (markdown) bozmadan PDF'e dönüştürebiliyor. Önce notlarımı Notion'a alıyor, sonra bunları PDF'e çevirerek NotebookLM'e kaynak olarak ekliyorum.
Burada kendi aldığım notların daha çok kavramlar üzerine olduğunu belirtmeliyim. Numpy'daki broadcast özelliği buna iyi bir örnek. Her fonksiyonun detaylarını tek tek not almak yerine, genel yöntemlere odaklanıyorum. Bir fonksiyonun genel mantığını kavramam ve birkaç kullanım örneğini görmem, ileride onu kullanabilmem için genellikle yeterli oluyor. Kod yazarken fonksiyonların detaylarını ve implementasyonunu cursor, roocode, aider gibi yapay zeka araçları benim için hallediyor. Ben tarif etmeme yetecek kadar bilgiyi almaya odaklanıyorum. İşin matematik kısmı varsa (makine öğrenmesi algoritmaları vs) onlara odaklanıyorum.
Konunun temelini ve kavramlarını kavradıktan sonra pratik aşamasına geçiyorum. Bunun için de yine ChatGPT, Gemini veya Grok'tan yardım alıyorum. Bu konuda kullandığım prompt şöyle: "Python ile NumPy pratiği yapmak istiyorum. Benim için kolaydan zora olacak şekilde, 10 adet, gerçek hayat sorunlarını içeren problem üretir misin?" İşte aldığım cevap (soruların cevaplarını tabiki ben ekledim 🙂):
Harika bir fikir! NumPy, veri analizi, bilimsel hesaplama ve makine öğrenmesi gibi alanlarda temel bir kütüphanedir. İşte size kolaydan zora doğru sıralanmış, gerçek hayat senaryolarını içeren 10 NumPy pratik problemi:
Kolay Seviye
[50, 75, 30, 120, 90, 60, 40] (TL cinsinden).np.array(), np.sum(), np.mean(), np.max(), np.min()[80, 120, 65, 95, 150] TL olarak verilmiştir. Tüm kitaplarda %15 indirim uygulanacaktır.np.array(), temel aritmetik işlemler (çarpma, çıkarma).[15, 17, 18, 16, 19, 20, 18].np.array(), np.mean(), np.max(), boolean indeksleme (örn: dizi > 17).Orta Seviye
[65, 72, 88, 55, 91, 72, 80, 45, 95, 77]. Geçme notu 70'tir.np.array(), boolean indeksleme, np.sum() (boolean dizide True'ları saymak için), len(), np.mean().[10, 15, 12, 20, 18, 22, 25, 20, 8, 10, 14, 11] (Önce 1. ürünün 4 haftası, sonra 2. ürünün 4 haftası...).np.array(), reshape(), sum(axis=...).[22.5, 23.1, 21.8, 24.0, 25.3, 20.9, 22.7]. Bu değerleri Fahrenhayt'a (°F = °C * 9/5 + 32) çevirmeniz ve 73°F ile 77°F (dahil) arasındaki "ideal" ölçümleri filtrelemeniz gerekiyor.&).Zor Seviye
[2, 0.5, 3, 1, 5] (örn: 2 adet ekmek, 0.5 kg peynir, 3 litre süt, 1 paket makarna, 5 adet yumurta)[7.5, 80, 25, 15, 2.5] (örn: Ekmek 7.5 TL/adet, Peynir 80 TL/kg, Süt 25 TL/litre...)np.multiply() veya (element-wise çarpım), np.sum(). Alternatif olarak doğrudan np.dot() (nokta çarpım) da kullanılabilir.[[10, 20], [15, 35], [5, 25]]. Şirketinizin merkezi ise [0, 0] noktasındadır.sqrt((x2-x1)^2 + (y2-y1)^2)) hesaplayın ve mesafeleri içeren bir dizi oluşturun. En yakın ve en uzak müşteriyi bulun.np.sqrt(), np.sum(axis=1), np.argmin(), np.argmax(). Broadcasting (yayma) özelliğini kullanmak da işleri kolaylaştırabilir.[100, 102, 101, 105, 107, 106, 108, 110, 112, 111][50, 51, 52, 51, 53, 54, 55, 53, 56, 57](bugünkü_fiyat - dünkü_fiyat) / dünkü_fiyat * 100) hesaplayın (ilk gün için getiri hesaplanamaz). Ardından bu iki getiri serisi arasındaki korelasyon katsayısını hesaplayın. Bu katsayı, iki hissenin fiyatlarının ne kadar birlikte hareket ettiğini gösterir.np.diff() (farkları almak için), np.corrcoef().[[ 10, 20, 30, 40, 50],
[ 60, 70, 80, 90, 100],
[110, 120, 130, 140, 150],
[160, 170, 180, 190, 200],
[210, 220, 230, 240, 250]]
np.clip() fonksiyonu (değerleri belirli bir aralıkta sınırlamak için).Bu problemlerle NumPy'nin temelinden başlayarak daha karmaşık operasyonlarına kadar pratik yapabilirsiniz. Başarılar dilerim!
Her bir soruyu ciddiye alarak ve mümkünse yapay zeka yardımı almadan çözmeye çalışıyorum. Takıldığım noktalarda konu bazında sorular soruyorum. Örneğin, np.clip() ipucu verildiğinde ve işlevini bilmediğimde şöyle bir soru soruyorum: "NumPy kütüphanesinde clip fonksiyonu ne işe yarar? Benim için 5 farklı kullanım örneği verir misin? Başka konularla bağlantısı varsa onları da açıklar mısın?" Aldığım cevabı önce Notion'a, oradan da PDF olarak NotebookLM'e aktarıyorum. Tüm soruları cevapladıktan sonra hem soruları hem cevapları NotebookLM'e aktarıp bilgiyi çağırma ve tekrar aşamasına geçiyorum.
Bu aşamada NotebookLM içerisinde biriktirdiğimiz kaynaklar işe yaramaya başlıyor. NotebookLM tarafından sağlanan "Özet Belge", "Çalışma Klavuzu" , "Sıkça Sorulan Sorular" gibi hızlı promptlar genelde tekrar etmemi kolaylaştırıyor ve konuyu kavrıyorum. Ayrıca kendi aldığım notlar arasında da "şöyle bir şey vardı o notu bana hatırlatır mısın" demem notuma kolayca ulaşmamı sağlıyor.
Bir saat içinde belki uzman olamadım ama konuyu iyi kavradığıma eminim. Artık ihtiyaç duyduğumda NumPy'ı rahatlıkla kullanabilir, karşıma çıkan NumPy kodlarını kolayca anlayabilirim. En önemlisi de yapay zekaya fikirlerimi aktarırken NumPy kavramlarını prompt'a ekleyebilir ve çalıştığım kodu buna göre şekillendirebilirim.
Yapay zeka tek bir prompt ile karşılaştığımız karmaşık problemleri çözene kadar bu öğrenme yaklaşımımı sürdürmeyi planlıyorum. Sam Altman'ın yakın zamanda yaptığı bir konuşmada belirttiği gibi: "Biz yazılımcıların yerini alacak değil, onları 10x mühendis yapacak araçlar geliştirmeye çalışıyoruz." Yapay zekayı hayatımıza entegre etmeli, onu nasıl kullanacağımızı ve nasıl 10x mühendis olacağımızı sürekli düşünmeliyiz. Saygılarımla, Mikail Karadeniz.
Giriş:
Bu belge, sağlanan çeşitli kaynaklardaki temel temaları, önemli fikirleri ve gerçekleri özetlemektedir. Kaynaklar, NumPy kütüphanesinin temellerini, özelliklerini, kullanım alanlarını ve temel kavramlarını kapsamaktadır.
Ana Temalar ve Önemli Fikirler:
a + b yazmak, her bir öğe için ayrı ayrı döngü kullanmaktan çok daha hızlıdır. ("Örneğin, iki NumPy dizisini toplamak için a + b yazmak, her bir öğe için ayrı ayrı döngü kullanmaktan çok daha hızlıdır.").ndim özelliği boyut sayısını, .shape özelliği her bir eksendeki eleman sayısını gösteren bir tuple'ı, .size özelliği ise toplam eleman sayısını döndürür. ("Boyut Sayısı (ndim): Bir dizinin kaç tane ekseni olduğunu belirtir. Vektör için 1, matris için 2'dir.", "Şekil (shape): Her bir eksendeki eleman sayısını gösteren bir tuple'dır.")numpy.array() fonksiyonu ile oluşturulur ve indeksleme, her bir boyut için bir indeks belirtilerek yapılır (örneğin, x[0, 1]). ("NumPy'da çok boyutlu diziler numpy.array() fonksiyonu ile oluşturulur. Örneğin, np.array([[1, 2, 3], [4, 5, 6]]) 2x3'lük bir dizi oluşturur. İndeksleme, sıfırdan başlayarak satır ve sütun numaralarını kullanarak yapılır; örneğin, x[0, 1] ilk satırın ikinci öğesini ifade eder.")np.sum()), ortalama (np.mean()), standart sapma (np.std()), maksimum (np.max()), minimum (np.min()) gibi birçok matematiksel fonksiyon bulunur. ("NumPy, toplama (np.sum()), ortalama (np.mean()), standart sapma (np.std()), maksimum (np.max()), minimum (np.min())... gibi çok çeşitli matematiksel işlemleri destekler.")np.sum() fonksiyonu, tüm elemanların toplamını alabileceği gibi, belirli eksenler (satır veya sütun) boyunca da toplam alabilir. ("numpy.sum() , bir NumPy dizisindeki (array) elemanların toplamını hesaplamak için kullanılan temel ve çok yönlü bir fonksiyondur. Sadece tüm elemanları toplamakla kalmaz, aynı zamanda belirli eksenler (axis) boyunca toplama...")&, |, ~) de diziler üzerinde eleman bazında uygulanabilir. ("NumPy dizilerinde eleman bazında (element-wise) mantıksal işlemler yapmak için standart and , or , not yerine özel operatörler kullanmalısınız: `&` (AND), `|` (OR), `~` (NOT)")numpy.random modülü, çeşitli olasılık dağılımlarından rastgele sayılar üretmek için kullanılır. (numpy.random modülünün temel işlevi nedir ve hangi tür rasgele sayılar üretilebilir? numpy.random modülü, çeşitli olasılık dağılımlarından rasgele sayılar üretmek için kullanılır. Normal dağılımlı sayılar (rng.normal()), tek tip dağılımlı sayılar (rng.uniform()) ve tam sayılar (rng.randint()) gibi farklı türlerde rasgele sayılar oluşturulabilir.")np.random.default_rng() ile bir rastgele sayı üreteci oluşturulabilir ve bu üretecin metotları (normal(), uniform(), randint()) ile farklı dağılımlardan sayılar üretilebilir.np.vectorize() kullanmak: Tekil değerler üzerinde çalışan bir Python fonksiyonunu NumPy dizisine uygulamak için kullanılabilir. Performans açısından doğrudan vektörel uygulama kadar hızlı olmasa da pratiktir.numpy.corrcoef() fonksiyonu, verilen veriler için Pearson korelasyon katsayılarını hesaplayarak bir korelasyon matrisi döndürür.rowvar parametresi, girdide satırların mı yoksa sütunların mı değişkenleri temsil ettiğini belirtmek için önemlidir.numpy.sum()) Fonksiyonunumpy.sum() fonksiyonu, bir NumPy dizisindeki elemanların toplamını hesaplamak için kullanılır.axis parametresi ile belirli eksenler boyunca toplama yapılabilir.dtype parametresi ile toplama sırasında kullanılacak veri tipi belirtilebilir.keepdims, out, initial, where gibi diğer parametreler de çeşitli kullanım senaryoları için esneklik sağlar.Sonuç:
Sağlanan kaynaklar, NumPy'ın bilimsel hesaplamalar, veri analizi, görüntü işleme ve derin öğrenme gibi çeşitli alanlarda temel bir araç olduğunu açıkça göstermektedir. N-boyutlu diziler, vektörleştirme, yayınlama ve zengin fonksiyonellik gibi özellikleri sayesinde NumPy, Python'ı güçlü ve verimli bir bilimsel programlama dili haline getiren temel taşlardan biridir.