├── numpy.png ├── README.md └── numpy-tutorial.ipynb /numpy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YusufAltuntas/numpy-tutorial/HEAD/numpy.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/YusufAltuntas/numpy-tutorial/blob/master/numpy-tutorial.ipynb) 2 | 3 | ![numpy icon](/numpy.png) 4 | 5 | 6 | ## **1) Temel Bilgiler:** 7 | 8 | ### [**1.1 Numpy Nedir?**](#11-numpy-nedir) 9 | - Numpy'nin temel amacı 10 | - Neden numpy kullanmalıyız? 11 | - Numpy'nin Özellikleri 12 | - Python listeleri ile numpy dizileri arasındaki farklar 13 | 14 | ### [**1.2 Numpy Dizileri (Arrays)**](#12-numpy-dizileri-arrays) 15 | - [Numpy Arrayleri Nedir?](#121-numpy-array-nedir) 16 | - [Array Oluşturma](#122-array-oluşturma) 17 | - [np.zeros(), np.ones(), np.empty() vs.](#1221-npzeros-npones-npempty) 18 | - [np.arange(), np.linspace()](#1222-nparange-nplinspace) 19 | - [Random sayı üretimi: np.random.rand(), np.random.randn(), vs.](#1223-random-sayı-üretimi-nprandomrand-nprandomrandn) 20 | - [Array Özellikleri: Şekil, Boyut](#123-array-özellikleri-şekil-boyut) 21 | - [Dizilerin Veri Tipleri](#124-dizilerin-veri-tipleri) 22 | - [Dizilerin İndekslenmesi ve Dilimlenmesi](#125-dizilerin-i̇ndekslenmesi-ve-dilimlenmesi) 23 | 24 | --- 25 | 26 | 27 | ## **2) Temel İşlemler:** 28 | 29 | ### [**2.1 Dizi İşlemleri:**](#21-dizi-i̇şlemleri) 30 | - [Dizi Elemanlarına Erişim](#211-dizi-elemanlarına-erişim) 31 | - [Tek Bir Elemana Erişim](#2111-tek-bir-elemana-erişim) 32 | - [Dilimleme İle Erişim](#2112-dilimleme-i̇le-erişim) 33 | - [Koşullu İndeksleme](#2113-koşullu-i̇ndeksleme) 34 | - [Çok Boyutlu Dizilerde Erişim](#2114-çok-boyutlu-dizilerde-erişim) 35 | 36 | - [Aritmetik İşlemler](#212-aritmetik-i̇şlemler) 37 | - [Temel Aritmetik İşlemler](#2121-temel-aritmetik-i̇şlemler) 38 | - [Üstel ve Logaritmik İşlemler](#2122-üstel-ve-logaritmik-i̇şlemler) 39 | - [İleri Düzey İşlemler](#2123-i̇leri-düzey-i̇şlemler) 40 | 41 | - [Rastgele Sayılar Üretme](#213-rastgele-sayılar-üretme) 42 | - [np.random.rand()](#2131-nprandomrand) 43 | - [seed() Fonksiyonu](#2132-seed-fonksiyonu) 44 | - [np.random.randint()](#2133-nprandomrandint) 45 | - [np.random.randn()](#2134-nprandomrandn) 46 | - [np.random.choice()](#2135-nprandomchoice) 47 | 48 | ### [**2.2 Array Şekil Değiştirme**](#22-array-şekil-değiştirme) 49 | - [Dizinin Şeklini Değiştirme](#221-dizinin-şeklini-değiştirme) 50 | - [`reshape()` Fonksiyonu](#2211-reshape-fonksiyonu) 51 | - [`resize()` Fonksiyonu](#2212-resize-fonksiyonu) 52 | - [`reshape()` ve `-1` Kullanımı](#2213-reshape-ve--1-kullanımı) 53 | - [Düzleştirme: flatten() Fonksiyonu](#2214-düzleştirme-flatten-fonksiyonu) 54 | - [`ravel()` Fonksiyonu](#2215-ravel-fonksiyonu) 55 | 56 | - [Dizileri Birleştirme ve Ayırma](#222-dizileri-birleştirme-ve-ayırma) 57 | - [`concatenate()` Fonksiyonu](#2221-concatenate-fonksiyonu) 58 | - [`stack()` Fonksiyonu](#2222-stack-fonksiyonu) 59 | - [`vstack()` ve `hstack()` Fonksiyonları](#2223-vstack-ve-hstack-fonksiyonları) 60 | - [`split()` Fonksiyonu](#2224-split-fonksiyonu) 61 | - [`vsplit()` ve `hsplit()` Fonksiyonları](#2225-vsplit-ve-hsplit-fonksiyonları) 62 | 63 | 64 | ### [**2.3 Veri Tipi Dönüşümleri**](#23-veri-tipi-dönüşümleri) 65 | - [astype() Fonksiyonu](#231-astype-fonksiyonu) 66 | - [asarray() Fonksiyonu](#232-asarray-fonksiyonu) 67 | - [Veri Tipi Sınırlamaları ve İşlem Önerileri](#233-veri-tipi-sınırlamaları-ve-i̇şlem-önerileri) 68 | 69 | ### [**2.4 Fancy Indexing:**](#24-fancy-indexing) 70 | - [Tek Boyutlu Fancy Indexing](#241-tek-boyutlu-fancy-indexing) 71 | - [İki Boyutlu Fancy Indexing](#242-i̇ki-boyutlu-fancy-indexing) 72 | - [Maskelerle Indexleme](#243-maskelerle-indexleme) 73 | - [Boolean Maskelerle Indexleme](#2431-boolean-maskelerle-indexleme) 74 | - [Koşul İfadeleri ile Indexleme](#2432-koşul-i̇fadeleri-ile-indexleme) 75 | 76 | ### [**2.5 Array Operasyonları:**](#25-array-operasyonları) 77 | - [Broadcasting (Yayılma)](#251-broadcasting-yayılma) 78 | - [Yayılma Kuralları](#2511-broadcasting-kuralları) 79 | - [Örneklerle Yayılma Kullanımı](#2512-örneklerle-yayılma-kullanımı) 80 | - [Dizi Yineleme (Repeating)](#252-dizi-yineleme-repeating) 81 | - [İç Çarpım (dot product)](#253-i̇ç-çarpım-dot-product) 82 | - [İşlem fonksiyonları (np.sum(), np.prod(), np.mean() vs.)](#254-i̇şlem-fonksiyonları-npsum-npprod-npmean-vs) 83 | 84 | --- 85 | 86 | ## [**3. Lineer Cebir İşlemleri**](#3-lineer-cebir-i̇şlemleri) 87 | - [Matris çarpımı](#31-matris-çarpımı) 88 | - [Determinant ve ters matris hesaplama](#32-determinant-ve-ters-matris-hesaplama) 89 | 90 | 91 | ## [**4. Universal Functions (ufuncs):**](#4-universal-functions-ufuncs) 92 | 93 | --- 94 | 95 | # **Temel Bilgiler** 96 | 97 | ## **1.1 Numpy Nedir?** 98 | 99 | Numpy, Python programlama dili için temel bir kütüphanedir ve bilimsel hesaplama ve veri işleme için kullanılır. Numpy'nin temel amacı, Python'da veri işlemesi ve hesaplamaları yapmak için hızlı ve etkili bir şekilde çalışabilecek yüksek performanslı çok boyutlu diziler ve matematiksel işlevler sunmaktır. 100 | 101 | ### **Neden Numpy Kullanmalıyız?** 102 | 103 | Numpy'nin kullanılmasının bazı avantajları şunlardır: 104 | - **Hızlı ve Verimli İşlemler:** Numpy, C ve Fortran dilinde yazılmış alt seviye optimizasyonlar kullanır, bu da Python'da yavaş olan bazı işlemleri hızlandırır. 105 | - **Diziler Üzerinde Hızlı İşlemler:** Numpy dizileri, Python listelerine göre daha hızlı ve verimli işlemler yapmak için optimize edilmiştir. 106 | - **Geniş Fonksiyonellik:** Numpy, matematiksel işlevler, rastgele sayı üretimi, lineer cebir işlemleri gibi birçok faydalı fonksiyon ve işlev içerir. 107 | - **Veri Analizi ve Bilimsel Hesaplama:** Numpy, veri analizi, bilimsel hesaplama, simülasyonlar ve modeller gibi çeşitli alanlarda yaygın olarak kullanılır. 108 | 109 | ### **Numpy'nin Özellikleri** 110 | 111 | Numpy'nin bazı temel özellikleri şunlardır: 112 | - **Çok Boyutlu Diziler (Arrays):** Numpy, çok boyutlu dizileri destekler. Bu, tek boyutlu vektörlerden çok boyutlu matrislere kadar geniş bir veri yelpazesini kapsar. 113 | - **Matematiksel İşlevler:** Numpy, temel matematiksel işlevler (sin, cos, exp vb.) ve işlemler (toplama, çıkarma, çarpma, bölme vb.) için fonksiyonlar içerir. 114 | - **Yüksek Performanslı Hesaplama:** Numpy, vektörize edilmiş işlemler ve alt seviye optimizasyonlar kullanarak yüksek performanslı hesaplamalar sağlar. 115 | - **Geniş Kullanım Alanı:** Numpy, veri analizi, bilimsel hesaplama, makine öğrenmesi, görüntü işleme gibi birçok alanda kullanılır. 116 | 117 | ### **Python Listeleri ile Numpy Dizileri Arasındaki Farklar** 118 | 119 | Numpy dizileri ile Python listeleri arasındaki temel farklar şunlardır: 120 | 1. **Performans:** Numpy dizileri, Python listelerine göre daha hızlı ve verimli işlemler yapar. Bu, özellikle büyük veri kümeleri üzerinde çalışırken belirgin hale gelir. 121 | 2. **Veri Tipi ve Boyut Kontrolü:** Numpy dizileri, elemanları aynı veri tipinde tutar ve sabit bir boyuta sahiptir. Bu, veri kümeleri üzerinde homojen işlemler yapmayı kolaylaştırır. 122 | 3. **Matematiksel İşlemler:** Numpy dizileri, matematiksel işlemler için optimize edilmiş vektörize edilmiş işlemleri destekler. Bu, Python listelerinden daha hızlı ve daha kolay matematiksel işlemler yapmayı sağlar. 123 | 4. **Bellek Yönetimi:** Numpy dizileri, veriyi daha etkin bir şekilde bellekte depolar ve işler. Bu, bellek kullanımını optimize eder ve verimliliği artırır. 124 | 125 | 126 | | Numpy Dizileri | Python Listeleri | 127 | |--------------------------------------------|--------------------------------------------| 128 | | Numpy dizileri aynı türde verileri içerir. | Python listeleri farklı türde verileri içerebilir. | 129 | | Numpy dizileri boyutları sabittir. | Python listeleri dinamik boyutlara sahiptir. | 130 | | Numpy dizilerinde vektörleştirilmiş işlemler yapılabilir, bu da performansı artırır. | Python listelerinde döngüler kullanılarak işlemler yapılır, bu performansı düşürebilir. | 131 | 132 | --- 133 | 134 | ## **1.2 Numpy Dizileri (Arrays)** 135 | 136 | Numpy, Python'da bilimsel hesaplamalar yapmak için kullanılan temel bir kütüphanedir. En önemli özelliklerinden biri, çok boyutlu (çok boyutlu) dizilerle çalışabilme yeteneğidir. Bu çok boyutlu dizilere "Numpy array" denir. 137 | 138 | --- 139 | 140 | ### **1.2.1 Numpy Array Nedir?** 141 | 142 | Numpy array, homojen veri tiplerinden oluşan bir grid yapısıdır. Bir numpy array, aynı türde veriler içerir ve boyutları sabittir. Numpy array'leri, Python listelerine benzerdir ancak daha etkin ve hızlıdır. 143 | 144 | #### **Numpy Array Özellikleri** 145 | 146 | 1. **Homojen Veri Tipi:** 147 | - Numpy array'leri, aynı türde verileri içerir. Bu, veri işleme ve matematiksel operasyonlar için çok önemlidir çünkü her eleman aynı veri türüne sahiptir. 148 | 149 | 2. **Sabit Boyut:** 150 | - Numpy array'lerinin boyutları oluşturulduktan sonra değiştirilemez. Bu, bellek kullanımını optimize eder ve hızlı işlemler sağlar. 151 | 152 | 3. **Hızlı ve Verimli:** 153 | - Numpy, C altında derlenmiş bir kütüphanedir, bu da işlemlerin hızlı ve verimli bir şekilde yapılmasını sağlar. Büyük veri kümeleriyle çalışırken performans avantajı sağlar. 154 | 155 | 4. **Çok Boyutlu Yetenek:** 156 | - Numpy array'leri, tek boyutlu, iki boyutlu ve daha fazla boyutta olabilir. Bu, matematiksel ve bilimsel hesaplamalarda çok yönlü kullanım sağlar. 157 | 158 | --- 159 | 160 | #### **Python Listeleri ile Numpy Arrayleri Arasındaki Farklar** 161 | 162 | Numpy array'leri ve Python listeleri arasındaki ana farklar şunlardır: 163 | 164 | - **Performans:** 165 | - Numpy array'leri, vektörleştirilmiş operasyonlar ve optimize edilmiş bellek kullanımı sayesinde Python listelerinden daha hızlıdır. 166 | 167 | - **Veri Tipi Kontrolü:** 168 | - Numpy array'leri homojen veri tipleri içerirken, Python listeleri heterojen veri tipleri içerebilir. 169 | 170 | - **Boyut Değiştirme:** 171 | - Numpy array'lerinin boyutları oluşturulduktan sonra değiştirilemezken, Python listelerinin boyutu dinamik olarak değiştirilebilir. 172 | 173 | - **Matematiksel İşlemler:** 174 | - Numpy array'leri, matematiksel işlemleri vektörleştirme yeteneği ile desteklerken, Python listeleri bunu doğrudan desteklemez. 175 | 176 | Bu farklar, Numpy'nin Python listelerine tercih edilmesinin temel nedenlerindendir. Numpy array'leri, bilimsel hesaplamalar, veri analizi ve makine öğrenimi gibi uygulamalarda yaygın olarak kullanılmaktadır. 177 | 178 | 179 | --- 180 | ### **1.2.2 Array Oluşturma** 181 | 182 | Numpy kütüphanesi, çeşitli yöntemlerle array oluşturmayı sağlar. Bu yöntemler, farklı ihtiyaçlara göre farklı türde arrayler oluşturmanıza olanak tanır. 183 | 184 | #### **1.2.2.1 `np.zeros()`, `np.ones()`, `np.empty()`** 185 | 186 | Bu fonksiyonlar, belirli bir şekilde sıfırlar, birler veya boş değerler içeren arrayler oluşturur. Temel kullanımı aşağıdaki gibidir: 187 | 188 | - `np.zeros(shape)`: Belirtilen boyutta sıfırlardan oluşan bir array oluşturur. 189 | - `np.ones(shape)`: Belirtilen boyutta birlerden oluşan bir array oluşturur. 190 | - `np.empty(shape)`: Belirtilen boyutta boş değerler içeren bir array oluşturur. Bu array'in değerleri, bellekteki mevcut duruma bağlı olarak değişkenlik gösterebilir. 191 | --- 192 | 193 | 194 | ```python 195 | import numpy as np 196 | 197 | zeros_array = np.zeros((2, 3)) # 2x3 boyutunda sıfırlardan oluşan array 198 | print(zeros_array, "\n") 199 | # Çıktı: 200 | # [[0. 0. 0.] 201 | # [0. 0. 0.]] 202 | 203 | ones_array = np.ones((3, 2)) # 3x2 boyutunda birlerden oluşan array 204 | print(ones_array,"\n") 205 | # Çıktı: 206 | # [[1. 1.] 207 | # [1. 1.] 208 | # [1. 1.]] 209 | 210 | empty_array = np.empty((2, 2)) # 2x2 boyutunda boş değerler içeren array 211 | print(empty_array) 212 | # Çıktı: 213 | # [[4.67296746e-307 1.69121096e-306] 214 | # [8.34441742e-308 1.24611470e-306]] 215 | ``` 216 | 217 | [[0. 0. 0.] 218 | [0. 0. 0.]] 219 | 220 | [[1. 1.] 221 | [1. 1.] 222 | [1. 1.]] 223 | 224 | [[2. 1. ] 225 | [1.5 0.5]] 226 | 227 | 228 | 229 | --- 230 | 231 | #### **1.2.2.2 `np.arange()`, `np.linspace()`** 232 | 233 | Bu fonksiyonlar, belirli bir aralıktaki sayılarla dolu arrayler oluşturur. 234 | 235 | - `np.arange(start, stop, step)`: Belirli bir aralıktaki sayıları belirtilen adımlarla içeren bir array oluşturur. 236 | - `np.linspace(start, stop, num)`: Belirli bir aralıktaki belirli sayıda eşit aralıklı sayıları içeren bir array oluşturur. 237 | 238 | --- 239 | 240 | 241 | ```python 242 | import numpy as np 243 | 244 | range_array = np.arange(0, 10, 2) # 0'dan 10'a kadar 2'şer artan sayılar 245 | print(range_array, "\n") 246 | # Çıktı: [0 2 4 6 8] 247 | 248 | linspace_array = np.linspace(0, 10, 5) # 0'dan 10'a kadar 5 eşit aralıklı sayılar 249 | print(linspace_array) 250 | # Çıktı: [ 0. 2.5 5. 7.5 10. ] 251 | ``` 252 | 253 | [0 2 4 6 8] 254 | 255 | [ 0. 2.5 5. 7.5 10. ] 256 | 257 | 258 | 259 | --- 260 | #### **1.2.2.3 Random Sayı Üretimi: `np.random.rand()`, `np.random.randn()`** 261 | 262 | Bu fonksiyonlar, belirli bir boyutta rastgele sayılar içeren arrayler oluşturur. 263 | 264 | - `np.random.rand(d0, d1, ..., dn)`: 0 ile 1 arasında uniform dağılımlı rastgele sayılar içeren bir array oluşturur. 265 | - `np.random.randn(d0, d1, ..., dn)`: Ortalaması 0 ve standart sapması 1 olan normal dağılımlı rastgele sayılar içeren bir array oluşturur. 266 | 267 | --- 268 | 269 | 270 | ```python 271 | import numpy as np 272 | 273 | random_array_uniform = np.random.rand(2, 2) # 2x2 boyutunda uniform dağılımlı rastgele sayılar 274 | print(random_array_uniform,"\n") 275 | 276 | 277 | random_array_normal = np.random.randn(2, 2) # 2x2 boyutunda normal dağılımlı rastgele sayılar 278 | print(random_array_normal) 279 | ``` 280 | 281 | [[0.66083539 0.07326587] 282 | [0.11192756 0.91149177]] 283 | 284 | [[ 0.14298326 1.20668909] 285 | [-0.69041712 0.67672093]] 286 | 287 | 288 | 289 | --- 290 | ### **1.2.3 Array Özellikleri: Şekil, Boyut** 291 | 292 | Numpy array'lerinin şekli ve boyutu, array'in yapısını ve içerdiği veri miktarını tanımlar. Bu özellikler, array üzerinde işlem yaparken ve verileri manipüle ederken oldukça önemlidir. 293 | 294 | --- 295 | #### **Array Şekli (Shape)** 296 | 297 | Bir array'in şekli, her boyuttaki eleman sayısını içeren bir tuple'dır. Örneğin, bir 2x3 boyutundaki array'in şekli `(2, 3)` şeklinde ifade edilir. 298 | 299 | --- 300 | #### **Array Boyutu (Dimension)** 301 | 302 | Bir array'in boyutu, içerdiği boyut sayısını ifade eder. Örneğin, 2x3 boyutundaki bir array 2 boyutlu (2D) olarak kabul edilir. 303 | 304 | --- 305 | 306 | 307 | ```python 308 | import numpy as np 309 | 310 | # 2x3 boyutunda bir array oluşturalım 311 | my_array = np.array([[1, 2, 3], 312 | [4, 5, 6]]) 313 | 314 | print("Array Şekli (Shape):", my_array.shape) # Çıktı: (2, 3) 315 | print("Array Boyutu (Dimension):", my_array.ndim) # Çıktı: 2 316 | ``` 317 | 318 | Array Şekli (Shape): (2, 3) 319 | Array Boyutu (Dimension): 2 320 | 321 | 322 | #### **Reshaping (Yeniden Şekillendirme)** 323 | 324 | Numpy, `reshape()` fonksiyonu aracılığıyla mevcut bir array'in şeklini değiştirmenize olanak tanır. Bu işlem, array'in boyutunu değiştirmez, sadece şeklini yeniden düzenler. 325 | 326 | 327 | ```python 328 | import numpy as np 329 | 330 | # 2x3 boyutunda bir array oluşturalım 331 | my_array = np.array([[1, 2, 3], 332 | [4, 5, 6]]) 333 | 334 | # Array'in şeklini (2, 3)ten (3, 2)'ye çevirelim 335 | reshaped_array = my_array.reshape((3, 2)) 336 | 337 | print("Yeniden Şekillendirilmiş Array:") 338 | print(reshaped_array) 339 | ``` 340 | 341 | Yeniden Şekillendirilmiş Array: 342 | [[1 2] 343 | [3 4] 344 | [5 6]] 345 | 346 | 347 | * Yukarıdaki örnekte, `reshape()` fonksiyonu kullanılarak `my_array` adlı array'in şekli (2, 3)'ten (3, 2)'ye çevrildi. 348 | 349 | #### **Array'in Boyutunu Değiştirme** 350 | 351 | Numpy, `reshape()` fonksiyonu dışında array'in boyutunu değiştiren `resize()` fonksiyonunu da sağlar. Bu fonksiyon, mevcut array'i değiştirir ve istenen boyuta uyacak şekilde genişletir veya kısaltır. 352 | 353 | 354 | ```python 355 | import numpy as np 356 | 357 | # 2x3 boyutunda bir array oluşturalım 358 | my_array = np.array([[1, 2, 3], 359 | [4, 5, 6]]) 360 | 361 | # Array'in boyutunu (3, 4)'e değiştirelim 362 | resized_array = np.resize(my_array, (3, 4)) 363 | 364 | print("Yeniden Boyutlandırılmış Array:") 365 | print(resized_array) 366 | ``` 367 | 368 | Yeniden Boyutlandırılmış Array: 369 | [[1 2 3 4] 370 | [5 6 1 2] 371 | [3 4 5 6]] 372 | 373 | 374 | * Yukarıdaki örnekte, `resize()` fonksiyonu kullanılarak `my_array` adlı array'in boyutu (3, 4)'e değiştirildi. 375 | 376 | ### **1.2.4 Dizilerin Veri Tipleri** 377 | 378 | Numpy dizileri, homojen veri tipleriyle (aynı tipte verileri içerir) çalışır. Bu, her bir öğenin aynı veri tipine sahip olması gerektiği anlamına gelir. Numpy, farklı türlerde veri tiplerini destekler ve her bir veri tipi farklı boyut ve işlemlere izin verir. 379 | 380 | #### **Numpy Veri Tipleri:** 381 | 382 | 1. **int**: Tam sayılar. 383 | 2. **float**: Ondalık sayılar. 384 | 3. **complex**: Karmaşık sayılar. 385 | 4. **bool**: Mantıksal (Boolean) değerler. 386 | 5. **string**: Karakter dizileri. 387 | 6. **object**: Python nesneleri için genel veri tipi. 388 | 7. **datetime**: Tarih ve saat veri tipleri. 389 | 390 | #### **Veri Tipi Belirtme** 391 | 392 | Numpy, bir dizi oluştururken veya bir diziye dönüştürürken veri tipini belirlemenize izin verir. Bu, bellek kullanımını optimize etmenize ve beklenmeyen sonuçlardan kaçınmanıza olanak tanır. 393 | 394 | 395 | ```python 396 | import numpy as np 397 | 398 | # Diziyi oluştururken veri tipini belirleme 399 | my_array = np.array([1, 2, 3], dtype=float) 400 | print("Float tipinde dizi:", my_array) 401 | 402 | # Dönüştürme işlemi sırasında veri tipini belirleme 403 | converted_array = np.array([1, 2, 3], dtype=float) 404 | print("Dönüştürülen dizi:", converted_array) 405 | ``` 406 | 407 | Float tipinde dizi: [1. 2. 3.] 408 | Dönüştürülen dizi: [1. 2. 3.] 409 | 410 | 411 | 412 | 413 | ### **1.2.5 Dizilerin İndekslenmesi ve Dilimlenmesi** 414 | 415 | Numpy dizileri, Python listelerine benzer şekilde indekslenir ve dilimlenir. Bu işlemler, belirli bir elemana erişmek veya belirli bir alt küme oluşturmak için kullanılır. Numpy, çok boyutlu dizilerle çalışırken bu işlemleri daha da güçlendirir. 416 | 417 | #### **1.2.5.1 İndeksleme** 418 | 419 | Numpy dizileri, 0'dan başlayarak indekslenir. Bir dizinin belirli bir elemanına erişmek için indeks numarasını kullanırız. 420 | 421 | 422 | ```python 423 | import numpy as np 424 | 425 | # 1D dizinin oluşturulması 426 | arr = np.array([1, 2, 3, 4, 5]) 427 | 428 | # İndeksleme 429 | print(arr[0]) # Çıktı: 1 430 | print(arr[2]) # Çıktı: 3 431 | ``` 432 | 433 | 1 434 | 3 435 | 436 | 437 | #### **1.2.5.2 Dilimleme (Slicing)** 438 | 439 | Dilimleme, bir dizinin belirli bir alt kümesini seçmek için kullanılır. Numpy dizilerinde dilimleme, Python listelerinden çok benzer şekilde çalışır. `[start:stop:step]` formülü kullanılır. Herhangi bir parametre belirtilmezse, varsayılan değerler kullanılır (başlangıç: 0, durdurma: son, adım: 1). 440 | 441 | 442 | ```python 443 | import numpy as np 444 | 445 | # 1D dizinin oluşturulması 446 | arr = np.array([1, 2, 3, 4, 5]) 447 | 448 | # Dilimleme 449 | print(arr[1:4]) # Çıktı: [2 3 4] 450 | print(arr[:3]) # Çıktı: [1 2 3] 451 | print(arr[::2]) # Çıktı: [1 3 5] 452 | ``` 453 | 454 | [2 3 4] 455 | [1 2 3] 456 | [1 3 5] 457 | 458 | 459 | #### **1.2.5.3 Çok Boyutlu Dizilerde İndeksleme ve Dilimleme** 460 | 461 | Çok boyutlu dizilerde, her boyuta ait bir indeks veya dilimleme kullanabiliriz. Her boyut için indeksleme ve dilimleme işlemleri virgülle ayrılır. 462 | 463 | 464 | ```python 465 | import numpy as np 466 | 467 | # 2D dizinin oluşturulması 468 | arr = np.array([[1, 2, 3], 469 | [4, 5, 6], 470 | [7, 8, 9]]) 471 | 472 | # İndeksleme ve Dilimleme 473 | print(arr[0, 0]) # Çıktı: 1 (1. satırın 1. sütunu) 474 | print(arr[1, 2]) # Çıktı: 6 (2. satırın 3. sütunu) 475 | print(arr[:2, 1:]) # Çıktı: [[2 3] 476 | # [5 6]] 477 | ``` 478 | 479 | 1 480 | 6 481 | [[2 3] 482 | [5 6]] 483 | 484 | 485 | # **Temel İşlemler** 486 | 487 | ## **2.1 Dizi İşlemleri** 488 | 489 | ### **2.1.1 Dizi Elemanlarına Erişim** 490 | 491 | Numpy dizilerinde, belirli elemanlara erişmek için çeşitli yöntemler bulunmaktadır. Bu yöntemler, tek bir elemana, belirli bir alt kümeye veya belirli bir koşulu sağlayan elemanlara erişmek için kullanılır. İşte farklı yöntemler ve örnekler: 492 | 493 | #### **2.1.1.1 Tek Bir Elemana Erişim** 494 | 495 | Tek bir elemana erişmek için, dizinin indeksini belirtiriz. Numpy dizileri, 0'dan başlayarak indekslenir. 496 | 497 | 498 | ```python 499 | import numpy as np 500 | 501 | # 1D dizi oluşturma 502 | arr = np.array([1, 2, 3, 4, 5]) 503 | 504 | # Birinci elemana erişim 505 | print("Birinci eleman:", arr[0]) # Çıktı: 1 506 | 507 | # Beşinci elemana erişim 508 | print("Beşinci eleman:", arr[4]) # Çıktı: 5 509 | ``` 510 | 511 | Birinci eleman: 1 512 | Beşinci eleman: 5 513 | 514 | 515 | --- 516 | #### **2.1.1.2 Dilimleme İle Erişim** 517 | 518 | Dilimleme, belirli bir alt kümenin seçilmesini sağlar. Başlangıç ve bitiş indeksleriyle belirtilen dilimler kullanılarak erişim yapılır. 519 | 520 | --- 521 | 522 | 523 | ```python 524 | import numpy as np 525 | 526 | # 1D dizi oluşturma 527 | arr = np.array([1, 2, 3, 4, 5]) 528 | 529 | # İkinci ve üçüncü elemanlara erişim 530 | print("İkinci ve üçüncü elemanlar:", arr[1:3]) # Çıktı: [2 3] 531 | 532 | # Tüm elemanlara erişim 533 | print("Tüm elemanlar:", arr[:]) # Çıktı: [1 2 3 4 5] 534 | ``` 535 | 536 | İkinci ve üçüncü elemanlar: [2 3] 537 | Tüm elemanlar: [1 2 3 4 5] 538 | 539 | 540 | --- 541 | #### **2.1.1.3 Koşullu İndeksleme** 542 | 543 | Koşullu indeksleme, belirli bir koşulu sağlayan elemanları seçmek için kullanılır. 544 | 545 | 546 | --- 547 | 548 | 549 | ```python 550 | import numpy as np 551 | 552 | # 1D dizi oluşturma 553 | arr = np.array([1, 2, 3, 4, 5]) 554 | 555 | # 3'ten büyük elemanlara erişim 556 | print("3'ten büyük elemanlar:", arr[arr > 3]) # Çıktı: [4 5] 557 | ``` 558 | 559 | 3'ten büyük elemanlar: [4 5] 560 | 561 | 562 | #### **2.1.1.4 Çok Boyutlu Dizilerde Erişim** 563 | 564 | Çok boyutlu dizilerde, her boyuta ait bir indeks veya dilimleme kullanılır. 565 | 566 | 567 | ```python 568 | import numpy as np 569 | 570 | # 2D dizi oluşturma 571 | arr = np.array([[1, 2, 3], 572 | [4, 5, 6], 573 | [7, 8, 9]]) 574 | 575 | # İkinci satırın üçüncü elemanına erişim 576 | print("İkinci satırın üçüncü elemanı:", arr[1, 2]) # Çıktı: 6 577 | 578 | # İlk iki satırın tüm elemanlarına erişim 579 | print("İlk iki satırın tüm elemanları:", arr[:2, :]) # Çıktı: [[1 2 3] 580 | # [4 5 6]] 581 | ``` 582 | 583 | İkinci satırın üçüncü elemanı: 6 584 | İlk iki satırın tüm elemanları: [[1 2 3] 585 | [4 5 6]] 586 | 587 | 588 | --- 589 | 590 | ### **2.1.2 Aritmetik İşlemler** 591 | 592 | Numpy dizileri, matematiksel işlemleri gerçekleştirmek için kullanılabilir. Bu işlemler, dizinin her elemanı üzerinde tek tek uygulanır veya iki dizinin karşılıklı elemanları arasında gerçekleştirilir. Numpy, bu işlemleri vektörize edilmiş hızlı işlemler olarak gerçekleştirir, bu da büyük veri setleri üzerinde verimliliği artırır. 593 | 594 | --- 595 | 596 | #### **2.1.2.1 Temel Aritmetik İşlemler:** 597 | 598 | 1. **Toplama**: İki dizinin karşılıklı elemanlarını toplar. 599 | 2. **Çıkarma**: İki dizinin karşılıklı elemanlarını çıkarır. 600 | 3. **Çarpma**: İki dizinin karşılıklı elemanlarını çarpar. 601 | 4. **Bölme**: İki dizinin karşılıklı elemanlarını böler. 602 | 603 | 604 | ```python 605 | import numpy as np 606 | 607 | # İki dizi oluşturma 608 | arr1 = np.array([1, 2, 3]) 609 | arr2 = np.array([4, 5, 6]) 610 | 611 | # Toplama 612 | result_addition = arr1 + arr2 613 | print("Toplama:", result_addition) # Çıktı: [5 7 9] 614 | 615 | # Çıkarma 616 | result_subtraction = arr1 - arr2 617 | print("Çıkarma:", result_subtraction) # Çıktı: [-3 -3 -3] 618 | 619 | # Çarpma 620 | result_multiplication = arr1 * arr2 621 | print("Çarpma:", result_multiplication) # Çıktı: [ 4 10 18] 622 | 623 | # Bölme 624 | result_division = arr1 / arr2 625 | print("Bölme:", result_division) # Çıktı: [0.25 0.4 0.5 ] 626 | ``` 627 | 628 | Toplama: [5 7 9] 629 | Çıkarma: [-3 -3 -3] 630 | Çarpma: [ 4 10 18] 631 | Bölme: [0.25 0.4 0.5 ] 632 | 633 | 634 | #### **2.1.2.2 Üstel ve Logaritmik İşlemler:** 635 | 636 | Numpy, diziler üzerinde üstel ve logaritmik işlemleri gerçekleştirmek için de fonksiyonlar sağlar. 637 | 638 | 1. **Üs Alma**: `np.power()` fonksiyonu kullanılarak her elemanın bir üs alınır. 639 | 640 | 2. **Logaritma**: `np.log()` ve `np.log10()` fonksiyonları kullanılarak logaritmalar hesaplanır. 641 | 642 | 643 | --- 644 | 645 | 646 | ```python 647 | import numpy as np 648 | 649 | # Dizi oluşturma 650 | arr = np.array([1, 2, 3]) 651 | 652 | # Üs alma (2^x) 653 | result_power = np.power(arr, 2) 654 | print("Üs alma (2^x):", result_power) # Çıktı: [1 4 9] 655 | 656 | # Logaritma (doğal logaritma) 657 | result_log = np.log(arr) 658 | print("Logaritma (doğal logaritma):", result_log) # Çıktı: [0. 0.69314718 1.09861229] 659 | 660 | # Logaritma (10 tabanında) 661 | result_log10 = np.log10(arr) 662 | print("Logaritma (10 tabanında):", result_log10) # Çıktı: [0. 0.30103 0.47712125] 663 | ``` 664 | 665 | Üs alma (2^x): [1 4 9] 666 | Logaritma (doğal logaritma): [0. 0.69314718 1.09861229] 667 | Logaritma (10 tabanında): [0. 0.30103 0.47712125] 668 | 669 | 670 | #### **2.1.2.3 İleri Düzey İşlemler** 671 | 672 | Numpy, dizilerde yaygın olarak kullanılan diğer matematiksel fonksiyonları da destekler, örneğin trigonometrik, hiperbolik, ters trigonometrik ve diğer özel fonksiyonlar. 673 | 674 | --- 675 | 676 | 677 | ```python 678 | import numpy as np 679 | 680 | # Dizi oluşturma 681 | arr = np.array([0, np.pi/2, np.pi]) 682 | 683 | # Sinüs 684 | result_sin = np.sin(arr) 685 | print("Sinüs:", result_sin) # Çıktı: [0.0000000e+00 1.0000000e+00 1.2246468e-16] 686 | 687 | # Cosinüs 688 | result_cos = np.cos(arr) 689 | print("Cosinüs:", result_cos) # Çıktı: [ 1.000000e+00 6.123234e-17 -1.000000e+00] 690 | 691 | # Tanjant 692 | result_tan = np.tan(arr) 693 | print("Tanjant:", result_tan) # Çıktı: [ 0.00000000e+00 1.63312394e+16 -1.22464680e-16] 694 | ``` 695 | 696 | Sinüs: [0.0000000e+00 1.0000000e+00 1.2246468e-16] 697 | Cosinüs: [ 1.000000e+00 6.123234e-17 -1.000000e+00] 698 | Tanjant: [ 0.00000000e+00 1.63312394e+16 -1.22464680e-16] 699 | 700 | 701 | 702 | --- 703 | 704 | ### **2.1.3 Rastgele Sayılar Üretme** 705 | 706 | Numpy, rastgele sayılar üretmek için `numpy.random` modülünü sağlar. Bu modül, farklı dağılımlara sahip rastgele sayılar üretmek için çeşitli fonksiyonlar içerir. Ayrıca, rastgele sayıların tekrar üretilebilir olmasını sağlamak için `seed()` fonksiyonu kullanılabilir. 707 | 708 | 709 | --- 710 | 711 | #### **2.1.3.1 np.random.rand()** 712 | 713 | `np.random.rand()` fonksiyonu, 0 ile 1 arasında uniform (eşit olasılıklı) dağılıma sahip rastgele sayılar üretir. 714 | 715 | 716 | 717 | 718 | ```python 719 | # 0 ile 1 arasında uniform dağılıma sahip 3 rastgele sayı üretme 720 | random_numbers = np.random.rand(3) 721 | print(random_numbers) # Örnek Çıktı: [0.891773 0.03942688 0.16983042] 722 | ``` 723 | 724 | [0.80726368 0.1899492 0.98928982] 725 | 726 | 727 | 728 | --- 729 | #### **2.1.3.2 seed() Fonksiyonu** 730 | 731 | `np.random.seed()` fonksiyonu, rastgele sayı üretiminde kullanılan rastgele sayı üretecinin başlangıç durumunu belirler. Bu, aynı seed değeri kullanıldığında, aynı rastgele sayılar üretileceği anlamına gelir. Bu, rastgele sayılarla çalışırken tekrarlanabilirlik gerektiğinde yararlıdır. 732 | 733 | 734 | ```python 735 | import numpy as np 736 | 737 | # seed() fonksiyonu kullanarak başlangıç durumunu belirleme 738 | np.random.seed(42) 739 | 740 | # Aynı seed değeri kullanıldığında aynı rastgele sayılar üretilir 741 | print(np.random.rand(3)) # Çıktı: [0.37454012 0.95071431 0.73199394] 742 | 743 | # Farklı bir seed değeri kullanıldığında farklı rastgele sayılar üretilir 744 | np.random.seed(123) 745 | print(np.random.rand(3)) # Çıktı: [0.69646919 0.28613933 0.22685145] 746 | ``` 747 | 748 | [0.37454012 0.95071431 0.73199394] 749 | [0.69646919 0.28613933 0.22685145] 750 | 751 | 752 | 753 | --- 754 | #### **2.1.3.3 np.random.randint()** 755 | 756 | `np.random.randint()` fonksiyonu, belirli bir aralıktan rastgele tam sayılar üretir. 757 | 758 | 759 | ```python 760 | # 1 ile 10 arasında rastgele tam sayı üretme 761 | random_integers = np.random.randint(1, 11, size=5) 762 | print(random_integers) # Örnek Çıktı: [6 3 3 7 4] 763 | ``` 764 | 765 | [ 7 2 4 10 7] 766 | 767 | 768 | 769 | --- 770 | #### **2.1.3.4 np.random.randn()** 771 | 772 | `np.random.randn()` fonksiyonu, standart normal dağılıma (ortalaması 0, standart sapması 1) sahip rastgele sayılar üretir. 773 | 774 | 775 | ```python 776 | # Standart normal dağılıma sahip 3 rastgele sayı üretme 777 | random_normal_numbers = np.random.randn(3) 778 | print(random_normal_numbers) # Örnek Çıktı: [-0.987502 -0.55895427 0.77606027] 779 | ``` 780 | 781 | [ 1.59530112 -1.78309431 -0.28645147] 782 | 783 | 784 | 785 | --- 786 | #### **2.1.3.5 np.random.choice()** 787 | 788 | `np.random.choice()` fonksiyonu, bir diziden rastgele örnekleme yapar. 789 | 790 | 791 | ```python 792 | # Verilen bir diziden rastgele örnekleme yapma 793 | arr = np.array([1, 2, 3, 4, 5]) 794 | random_sample = np.random.choice(arr, size=3, replace=False) 795 | print(random_sample) # Örnek Çıktı: [4 2 5] 796 | ``` 797 | 798 | [5 3 2] 799 | 800 | 801 | ## **2.2 Array Şekil Değiştirme** 802 | 803 | ### **2.2.1 Dizinin Şeklini Değiştirme** 804 | 805 | 806 | --- 807 | #### **2.2.1.1 `reshape()` Fonksiyonu** 808 | 809 | `reshape()` fonksiyonu, bir dizinin şeklini belirli bir şekilde değiştirmek için kullanılır. Yeni şekil, orijinal dizinin eleman sayısına uygun olmalıdır. 810 | 811 | 812 | ```python 813 | import numpy as np 814 | 815 | # 1D diziyi 2x3 2D dizisine dönüştürme 816 | arr1d = np.array([1, 2, 3, 4, 5, 6]) 817 | print("1d Dizi:", arr1d, "\n") 818 | arr2d = arr1d.reshape(2, 3) 819 | print("2D Dizi:\n", arr2d) 820 | ``` 821 | 822 | 1d Dizi: [1 2 3 4 5 6] 823 | 824 | 2D Dizi: 825 | [[1 2 3] 826 | [4 5 6]] 827 | 828 | 829 | 830 | --- 831 | #### **2.2.1.2 `resize()` Fonksiyonu** 832 | 833 | `resize()` fonksiyonu, bir diziyi belirtilen şekilde değiştirir, ancak orijinal diziyi değiştirir. 834 | 835 | 836 | ```python 837 | arr1d_ornek = np.array([1, 2, 3, 4, 5, 6]) 838 | print(arr1d_ornek, "\n") 839 | # Orijinal diziyi değiştirerek yeniden boyutlandırma 840 | arr1d_ornek.resize(2, 3) 841 | print("Yeniden Boyutlandırılmış Dizi:\n", arr1d_ornek) 842 | ``` 843 | 844 | [1 2 3 4 5 6] 845 | 846 | Yeniden Boyutlandırılmış Dizi: 847 | [[1 2 3] 848 | [4 5 6]] 849 | 850 | 851 | 852 | --- 853 | #### **2.2.1.3 `reshape()` ve `-1` Kullanımı** 854 | 855 | `reshape()` fonksiyonunda bir boyut için `-1` kullanarak, o boyutun boyutunu otomatik olarak belirtebiliriz. 856 | 857 | 858 | ```python 859 | print(arr1d, "\n") 860 | # Orijinal diziyi 2D dizisine dönüştürme, -1 ile otomatik boyut belirleme 861 | arr2d_auto = arr1d.reshape(2, -1) 862 | print("Otomatik Boyutlandırılmış Dizi:\n", arr2d_auto) 863 | ``` 864 | 865 | [1 2 3 4 5 6] 866 | 867 | Otomatik Boyutlandırılmış Dizi: 868 | [[1 2 3] 869 | [4 5 6]] 870 | 871 | 872 | 873 | --- 874 | #### **2.2.1.4 Düzleştirme: flatten() Fonksiyonu** 875 | 876 | `flatten()` fonksiyonu, çok boyutlu bir diziyi düzleştirerek 1D diziye dönüştürür. 877 | 878 | 879 | ```python 880 | print(arr2d, "\n") 881 | # 2D diziyi düzleştirme 882 | arr_flattened = arr2d.flatten() 883 | print("Düzleştirilmiş Dizi:\n", arr_flattened) 884 | ``` 885 | 886 | [[1 2 3] 887 | [4 5 6]] 888 | 889 | Düzleştirilmiş Dizi: 890 | [1 2 3 4 5 6] 891 | 892 | 893 | 894 | --- 895 | #### **2.2.1.5 `ravel()` Fonksiyonu** 896 | 897 | `ravel()` fonksiyonu da düzleştirme işlemi yapar, ancak orijinal dizideki verilere bir referans sağlar. 898 | 899 | 900 | ```python 901 | # 2D diziyi düzleştirme (ravel) 902 | arr_raveled = arr2d.ravel() 903 | print("Düzleştirilmiş Dizi (ravel):\n", arr_raveled) 904 | ``` 905 | 906 | Düzleştirilmiş Dizi (ravel): 907 | [1 2 3 4 5 6] 908 | 909 | 910 | 911 | --- 912 | ### **2.2.2 Dizileri Birleştirme ve Ayırma** 913 | 914 | Numpy, dizileri birleştirme ve ayırma işlemleri için çeşitli yöntemler sunar. Bu yöntemler, dizileri birleştirmek için `concatenate()` ve `stack()` gibi fonksiyonları içerirken, ayırma işlemleri için `split()` fonksiyonu kullanılır. 915 | 916 | 917 | --- 918 | #### **2.2.2.1 `concatenate()` Fonksiyonu** 919 | 920 | `concatenate()` fonksiyonu, belirtilen eksen boyunca iki veya daha fazla diziyi birleştirir. 921 | 922 | 923 | ```python 924 | import numpy as np 925 | 926 | # İki diziyi birleştirme 927 | arr1 = np.array([1, 2, 3]) 928 | arr2 = np.array([4, 5, 6]) 929 | 930 | result_concatenate = np.concatenate((arr1, arr2)) 931 | print("Birleştirilmiş Dizi:", result_concatenate) # Çıktı: [1 2 3 4 5 6] 932 | ``` 933 | 934 | Birleştirilmiş Dizi: [1 2 3 4 5 6] 935 | 936 | 937 | 938 | --- 939 | #### **2.2.2.2 `stack()` Fonksiyonu** 940 | 941 | `stack()` fonksiyonu, belirtilen eksen boyunca dizileri birleştirirken, yeni bir boyut ekler. 942 | 943 | 944 | ```python 945 | # İki diziyi yığma (stacking) 946 | result_stack = np.stack((arr1, arr2)) 947 | print("Yığılmış Dizi:\n", result_stack) 948 | ``` 949 | 950 | Yığılmış Dizi: 951 | [[1 2 3] 952 | [4 5 6]] 953 | 954 | 955 | 956 | --- 957 | #### **2.2.2.3 `vstack()` ve `hstack()` Fonksiyonları** 958 | 959 | `vstack()` fonksiyonu, dikey olarak (satır bazında) dizileri birleştirirken, `hstack()` fonksiyonu, yatay olarak (sütun bazında) birleştirir. 960 | 961 | 962 | ```python 963 | # Dikey olarak dizileri birleştirme (vstack) 964 | result_vstack = np.vstack((arr1, arr2)) 965 | print("Dikey Birleştirilmiş Dizi:\n", result_vstack) 966 | 967 | # Yatay olarak dizileri birleştirme (hstack) 968 | result_hstack = np.hstack((arr1, arr2)) 969 | print("Yatay Birleştirilmiş Dizi:", result_hstack) 970 | ``` 971 | 972 | Dikey Birleştirilmiş Dizi: 973 | [[1 2 3] 974 | [4 5 6]] 975 | Yatay Birleştirilmiş Dizi: [1 2 3 4 5 6] 976 | 977 | 978 | 979 | --- 980 | #### **2.2.2.4 `split()` Fonksiyonu** 981 | 982 | `split()` fonksiyonu, belirtilen bir diziyi verilen bir pozisyonda ayırır. 983 | 984 | 985 | ```python 986 | arr = np.array([1, 2, 3, 4, 5, 6]) 987 | result_split = np.split(arr, [2, 4]) 988 | print("Ayrılmış Dizi:", result_split) # Çıktı: [array([1, 2]), array([3, 4]), array([5, 6])] 989 | ``` 990 | 991 | Ayrılmış Dizi: [array([1, 2]), array([3, 4]), array([5, 6])] 992 | 993 | 994 | 995 | --- 996 | #### **2.2.2.5 `vsplit()` ve `hsplit()` Fonksiyonları** 997 | 998 | `vsplit()` fonksiyonu, dikey olarak (satır bazında), `hsplit()` fonksiyonu ise yatay olarak (sütun bazında) bir diziyi ayırır. 999 | 1000 | 1001 | ```python 1002 | # Dikey olarak diziyi ayırma (vsplit) 1003 | arr_2d = np.array([[1, 2, 3], [4, 5, 6]]) 1004 | result_vsplit = np.vsplit(arr_2d, 2) 1005 | print("Dikey Ayrılmış Dizi:\n", result_vsplit) 1006 | 1007 | # Yatay olarak diziyi ayırma (hsplit) 1008 | result_hsplit = np.hsplit(arr_2d, 3) 1009 | print("Yatay Ayrılmış Dizi:", result_hsplit) 1010 | ``` 1011 | 1012 | Dikey Ayrılmış Dizi: 1013 | [array([[1, 2, 3]]), array([[4, 5, 6]])] 1014 | Yatay Ayrılmış Dizi: [array([[1], 1015 | [4]]), array([[2], 1016 | [5]]), array([[3], 1017 | [6]])] 1018 | 1019 | 1020 | ## **2.3 Veri Tipi Dönüşümleri** 1021 | 1022 | Numpy, farklı veri tipleri arasında dönüşümler yapmak için çeşitli fonksiyonlar sağlar. Bu dönüşümler, bir veri tipini başka bir veri tipine dönüştürmek için kullanılır. 1023 | 1024 | ### **2.3.1 `astype()` Fonksiyonu** 1025 | 1026 | `astype()` fonksiyonu, bir dizinin veri tipini belirtilen bir veri tipine dönüştürür. 1027 | 1028 | 1029 | ```python 1030 | import numpy as np 1031 | 1032 | # İlk olarak, bir float veri tipine sahip bir dizi oluşturalım 1033 | arr_float = np.array([1.1, 2.2, 3.3, 4.4]) 1034 | 1035 | # Dizinin veri tipini integer olarak dönüştürelim 1036 | arr_int = arr_float.astype(int) 1037 | print("Dönüştürülmüş Dizi (integer):\n", arr_int) 1038 | 1039 | # Dizinin veri tipini string olarak dönüştürelim 1040 | arr_str = arr_float.astype(str) 1041 | print("Dönüştürülmüş Dizi (string):\n", arr_str) 1042 | ``` 1043 | 1044 | Dönüştürülmüş Dizi (integer): 1045 | [1 2 3 4] 1046 | Dönüştürülmüş Dizi (string): 1047 | ['1.1' '2.2' '3.3' '4.4'] 1048 | 1049 | 1050 | ### **2.3.2 `asarray()` Fonksiyonu** 1051 | 1052 | `asarray()` fonksiyonu, bir nesneyi diziye dönüştürür. Bu fonksiyon, belirtilen bir veri tipini de kabul eder. 1053 | 1054 | 1055 | ```python 1056 | # Listeyi diziye dönüştürme ve veri tipini belirtme 1057 | arr_list = [1, 2, 3, 4, 5] 1058 | arr_array = np.asarray(arr_list, dtype=float) 1059 | print("Dönüştürülmüş Dizi:\n", arr_array) 1060 | ``` 1061 | 1062 | Dönüştürülmüş Dizi: 1063 | [1. 2. 3. 4. 5.] 1064 | 1065 | 1066 | 1067 | --- 1068 | 1069 | ### **2.3.3 Veri Tipi Sınırlamaları ve İşlem Önerileri** 1070 | 1071 | Numpy'de veri tipleri, hesaplama sırasında önemli bir rol oynar. Farklı veri tipleri, bellek kullanımı, performans ve sonuçların doğruluğu açısından farklı avantajlar ve sınırlamalar sunar. Bu nedenle, veri tiplerini doğru bir şekilde seçmek önemlidir. 1072 | 1073 | #### **Veri Tipi Sınırlamaları** 1074 | 1075 | Numpy'de yaygın olarak kullanılan bazı veri tipleri şunlardır: 1076 | 1077 | - `int8`, `int16`, `int32`, `int64`: İşaretli tam sayılar. 1078 | - `uint8`, `uint16`, `uint32`, `uint64`: İşaretsiz tam sayılar. 1079 | - `float16`, `float32`, `float64`, `float128`: Ondalıklı sayılar. 1080 | - `bool`: Mantıksal (boolean) değerler. 1081 | - `complex64`, `complex128`, `complex256`: Karmaşık sayılar. 1082 | 1083 | Her veri tipinin sınırlamaları vardır. Örneğin, daha küçük bir veri tipi daha az bellek kullanırken, daha büyük bir veri tipi daha büyük değerleri temsil edebilir ancak daha fazla bellek kullanır. Ayrıca, veri tipleri arasında dönüşüm yaparken, veri kaybına yol açabilirsiniz. 1084 | 1085 | #### **İşlem Önerileri** 1086 | 1087 | 1. **Veri Tipi Seçimi**: Veri tipi seçerken, kullanılacak değerlerin aralığını ve hassasiyetini göz önünde bulundurmak önemlidir. Örneğin, integer yerine float veri tipini tercih etmek, daha geniş bir aralığı ve hassasiyeti sağlar, ancak daha fazla bellek kullanır. 1088 | 1089 | 2. **İşlem Hızı ve Bellek Kullanımı**: Büyük veri kümeleriyle çalışırken, veri tipi seçiminin işlem hızı ve bellek kullanımı üzerinde büyük bir etkisi olabilir. Daha küçük veri tipleri daha az bellek kullanırken, işlemler daha hızlı olabilir. Ancak, veri kaybı riski daha yüksektir. 1090 | 1091 | 3. **Veri Dönüşümleri**: İşlem sırasında, veri tipleri arasında dönüşümler yapılabilir. Ancak, bu dönüşümler veri kaybına yol açabilir. Bu nedenle, mümkünse, işlem yapmadan önce veri tiplerini dikkatlice seçmek önemlidir. 1092 | 1093 | #### Örnekler 1094 | 1095 | ```python 1096 | import numpy as np 1097 | 1098 | # Veri tiplerinin sınırlamaları 1099 | print("int16 Sınırları:", np.iinfo(np.int16)) 1100 | print("float32 Sınırları:", np.finfo(np.float32)) 1101 | 1102 | # Veri tipi dönüşümleri ve işlem önerileri 1103 | arr_float32 = np.array([1.5, 2.5, 3.5], dtype=np.float32) 1104 | arr_int32 = arr_float32.astype(np.int32) 1105 | print("Dönüştürülmüş Dizi (int32):\n", arr_int32) 1106 | ``` 1107 | 1108 | Bu örnekte, `np.iinfo()` ve `np.finfo()` fonksiyonları ile farklı veri tiplerinin sınırları gösterilmiş ve `astype()` fonksiyonu ile veri tipi dönüşümü yapılmıştır. Bu, veri tipi seçimi ve dönüşümleri konusunda dikkatli olmanın önemini vurgular. 1109 | 1110 | --- 1111 | 1112 | 1113 | --- 1114 | 1115 | ## **2.4 Fancy Indexing** 1116 | 1117 | Fancy indexing, Numpy dizilerini dilimlemek veya dizinin belirli elemanlarına erişmek için dizileri kullanma yöntemidir. Bu yöntemde, bir dizi veya liste kullanılarak dizinin belirli elemanlarına erişilir. Fancy indexing, basit indeksleme ve dilimleme yöntemlerine ek olarak daha esnek ve güçlü bir seçenektir. 1118 | 1119 | ### **2.4.1 Tek Boyutlu Fancy Indexing** 1120 | 1121 | Tek boyutlu dizilerde, fancy indexing bir dizi veya liste kullanarak belirli elemanlara erişmek için kullanılır. 1122 | 1123 | 1124 | ```python 1125 | import numpy as np 1126 | 1127 | arr = np.array([10, 20, 30, 40, 50]) 1128 | 1129 | # Fancy indexing kullanarak belirli elemanlara erişme 1130 | indices = [0, 2, 4] 1131 | result = arr[indices] 1132 | print("Fancy Indexing Sonucu:", result) # Çıktı: [10 30 50] 1133 | ``` 1134 | 1135 | Fancy Indexing Sonucu: [10 30 50] 1136 | 1137 | 1138 | ### **2.4.2 İki Boyutlu Fancy Indexing** 1139 | 1140 | İki boyutlu dizilerde, fancy indexing her boyut için ayrı bir dizi veya liste kullanılarak belirli elemanlara erişmek için kullanılır. 1141 | 1142 | 1143 | ```python 1144 | # İki boyutlu dizide fancy indexing kullanma 1145 | arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) 1146 | 1147 | # Belirli satır ve sütunları seçme 1148 | row_indices = [0, 2] 1149 | col_indices = [0, 2] 1150 | result_2d = arr_2d[row_indices][:, col_indices] 1151 | print("Fancy Indexing İle Seçilmiş Dizi:\n", result_2d) 1152 | ``` 1153 | 1154 | Fancy Indexing İle Seçilmiş Dizi: 1155 | [[1 3] 1156 | [7 9]] 1157 | 1158 | 1159 | ### **2.4.3 Maskelerle Indexleme** 1160 | 1161 | Maskelerle indexleme, bir koşula bağlı olarak dizinin belirli elemanlarına erişmek için kullanılır. Bu, koşula uyan veya uymayan elemanlara erişmek için kullanışlı bir yöntemdir. 1162 | 1163 | #### **2.4.3.1 Boolean Maskelerle Indexleme** 1164 | 1165 | Boolean maskeler, bir koşula bağlı olarak dizinin elemanlarını seçmek için kullanılır. 1166 | 1167 | 1168 | ```python 1169 | # Boolean maskelerle indexleme 1170 | arr = np.array([1, 2, 3, 4, 5]) 1171 | 1172 | mask = arr > 2 1173 | result_masked = arr[mask] 1174 | print("Maskelenmiş Dizi:", result_masked) # Çıktı: [3 4 5] 1175 | ``` 1176 | 1177 | Maskelenmiş Dizi: [3 4 5] 1178 | 1179 | 1180 | #### **2.4.3.2 Koşul İfadeleri ile Indexleme** 1181 | 1182 | Koşul ifadeleri, belirli bir koşula uyan dizinin elemanlarına erişmek için kullanılır. 1183 | 1184 | 1185 | ```python 1186 | # Koşul ifadeleri ile indexleme 1187 | arr = np.array([1, 2, 3, 4, 5]) 1188 | 1189 | result_condition = arr[arr > 2] 1190 | print("Koşula Uyan Elemanlar:", result_condition) # Çıktı: [3 4 5] 1191 | ``` 1192 | 1193 | Koşula Uyan Elemanlar: [3 4 5] 1194 | 1195 | 1196 | ## **2.5 Array Operasyonları** 1197 | 1198 | ### **2.5.1 Broadcasting (Yayılma)** 1199 | 1200 | Numpy'nin yayılma (broadcasting) kavramı, farklı şekillere sahip diziler arasında element-wise işlemleri gerçekleştirmek için kullanılan bir özelliktir. Bu özellik, boyutları uygun hale getirerek, daha az boyuta sahip bir dizi ile daha büyük bir dizi arasındaki işlemleri gerçekleştirmeyi mümkün kılar. 1201 | 1202 | Yayılma, Numpy'deki vektörize edilmiş işlemleri yaparken çok yaygın olarak kullanılır. Bir dizi ile skaler değerler arasında veya iki farklı şekle sahip diziler arasında işlem yapmak istendiğinde yayılma devreye girer. Bu durumda, Numpy, uygun boyutları otomatik olarak eşleştirir ve işlemi gerçekleştirir. 1203 | 1204 | Örneğin, iki farklı boyuta sahip diziler arasında toplama işlemi yapmak istendiğinde, küçük boyuttaki dizi, büyük boyuttaki diziye yayılabilir ve işlem gerçekleştirilebilir. 1205 | 1206 | Yayılmanın kullanımı, kodun daha temiz ve daha az karmaşık olmasını sağlar. Ayrıca, Python'un yaygın işlemlerini vektörize etmek için yaygın olarak kullanılır, bu da işlemlerin daha hızlı ve daha verimli olmasını sağlar. 1207 | 1208 | Özetlemek gerekirse, Numpy'nin yayılma kavramı, farklı boyutlara sahip diziler arasında işlemleri kolaylaştıran ve vektörize etmeye olanak tanıyan bir özelliktir. 1209 | 1210 | 1211 | --- 1212 | 1213 | #### **2.5.1.1 Broadcasting Kuralları** 1214 | 1215 | Numpy'de, broadcasting işlemlerinin gerçekleştirilmesi için belirli kurallar vardır. Bu kurallar, farklı şekillere sahip diziler arasında yayılma işlemlerini tanımlar ve uygun boyutları eşleştirmek için gereken adımları belirler. 1216 | 1217 | ##### **1. Boyut Uyumluluğu** 1218 | 1219 | Broadcasting işlemleri yaparken, dizilerin boyutları karşılaştırılır. Her boyutta, iki dizi ya aynı boyuta sahip olmalıdır ya da biri boyutsuz olmalıdır. Eğer boyutlardan biri 1 ise, bu boyut, diğer diziye uyumlu hale getirilebilir. 1220 | 1221 | 1222 | ```python 1223 | import numpy as np 1224 | 1225 | # 3x3 boyutunda bir dizi 1226 | arr1 = np.ones((3, 3)) 1227 | 1228 | # 1 boyutunda bir dizi 1229 | arr2 = np.array([1, 2, 3]) 1230 | 1231 | # Broadcasting ile işlem 1232 | result = arr1 + arr2 1233 | print("Broadcasting Sonucu:\n", result) 1234 | ``` 1235 | 1236 | Broadcasting Sonucu: 1237 | [[2. 3. 4.] 1238 | [2. 3. 4.] 1239 | [2. 3. 4.]] 1240 | 1241 | 1242 | 1243 | --- 1244 | ##### **2. Boyut Uyumsuzluğunda Hata** 1245 | 1246 | Eğer broadcasting işlemi için uygun boyut eşleşmeleri sağlanamıyorsa, Numpy hata verecektir. Bu durumda, dizilerin boyutlarını uyumlu hale getirmek veya işlemi gerçekleştirmek için başka bir yöntem kullanmak gerekir. 1247 | 1248 | --- 1249 | 1250 | 1251 | ```python 1252 | import numpy as np 1253 | 1254 | # 3x3 boyutunda bir dizi 1255 | arr1 = np.ones((3, 3)) 1256 | 1257 | # 2 boyutunda bir dizi 1258 | arr2 = np.array([1, 2]) 1259 | 1260 | # Broadcasting ile işlem (Hata alınır) 1261 | result = arr1 + arr2 1262 | ``` 1263 | 1264 | 1265 | --------------------------------------------------------------------------- 1266 | 1267 | ValueError Traceback (most recent call last) 1268 | 1269 | Cell In[50], line 10 1270 | 7 arr2 = np.array([1, 2]) 1271 | 9 # Broadcasting ile işlem (Hata alınır) 1272 | ---> 10 result = arr1 + arr2 1273 | 1274 | 1275 | ValueError: operands could not be broadcast together with shapes (3,3) (2,) 1276 | 1277 | 1278 | 1279 | --- 1280 | ##### **3. Boyut Ekleme** 1281 | 1282 | Broadcasting işlemi sırasında, boyut ekleme adımı gerçekleştirilir. Diziler arasındaki boyut farkı, eksik olan boyutlara 1 eklenerek tamamlanır. 1283 | 1284 | --- 1285 | 1286 | 1287 | ```python 1288 | import numpy as np 1289 | 1290 | # 3x3 boyutunda bir dizi 1291 | arr1 = np.ones((3, 3)) 1292 | 1293 | # 3 boyutunda bir dizi 1294 | arr2 = np.array([1, 2, 3]) 1295 | 1296 | # Broadcasting ile işlem 1297 | result = arr1 + arr2[:, np.newaxis] 1298 | print("Broadcasting Sonucu:\n", result) 1299 | ``` 1300 | 1301 | 1302 | --- 1303 | #### **2.5.1.2 Örneklerle Yayılma Kullanımı** 1304 | 1305 | Numpy'de yayılma (broadcasting) özelliği, farklı şekillere sahip diziler arasında element-wise işlemleri gerçekleştirmek için kullanılır. Bu özellik, boyutları uygun hale getirerek, daha az boyuta sahip bir dizi ile daha büyük bir dizi arasındaki işlemleri gerçekleştirmeyi mümkün kılar. İşte farklı yöntemlerle kullanılan yayılma örnekleri: 1306 | 1307 | 1308 | --- 1309 | ##### **1. Temel Yayılma** 1310 | 1311 | Temel yayılma, iki dizinin boyutları aynı veya biri boyutsuzsa gerçekleşir. Bu durumda, element-wise işlem doğrudan uygulanabilir. 1312 | 1313 | --- 1314 | 1315 | 1316 | ```python 1317 | import numpy as np 1318 | 1319 | arr1 = np.array([[1, 2, 3], [4, 5, 6]]) 1320 | arr2 = np.array([10, 20, 30]) 1321 | 1322 | # Temel yayılma ile işlem 1323 | result = arr1 + arr2 1324 | print("Temel Yayılma Sonucu:\n", result) 1325 | ``` 1326 | 1327 | 1328 | --- 1329 | ##### **2. Boyut Ekleme ile Yayılma** 1330 | 1331 | Boyut ekleme ile yayılma, boyutları uyumlu hale getirerek işlem yapılmasını sağlar. Bu durumda, boyutları farklı olan diziler arasında yayılma işlemi gerçekleştirilebilir. 1332 | 1333 | --- 1334 | 1335 | 1336 | ```python 1337 | # Boyut ekleme ile yayılma 1338 | arr1 = np.array([[1, 2, 3], [4, 5, 6]]) 1339 | arr2 = np.array([10, 20, 30]) 1340 | 1341 | # Boyut ekleme ile işlem 1342 | result = arr1 + arr2[:, np.newaxis] 1343 | print("Boyut Ekleme ile Yayılma Sonucu:\n", result) 1344 | ``` 1345 | 1346 | 1347 | --- 1348 | ##### **3. Broadcasting Kuralı ile Yayılma** 1349 | 1350 | Broadcasting kuralı, dizilerin uyumlu hale getirilmesi için gereken boyut eşleşmelerini belirler. Bu kuralı kullanarak, farklı boyutlara sahip diziler arasında yayılma işlemi gerçekleştirilebilir. 1351 | 1352 | --- 1353 | 1354 | 1355 | ```python 1356 | # Broadcasting kuralı ile yayılma 1357 | arr1 = np.array([[1, 2, 3], [4, 5, 6]]) 1358 | arr2 = np.array([1, 2]) 1359 | 1360 | # Broadcasting kuralı ile işlem 1361 | result = arr1 + arr2[:, np.newaxis] 1362 | print("Broadcasting Kuralı ile Yayılma Sonucu:\n", result) 1363 | ``` 1364 | 1365 | 1366 | --- 1367 | ### **2.5.2 Dizi Yineleme (Repeating)** 1368 | 1369 | Numpy'de dizi yineleme, bir diziyi belirli bir eksen boyunca tekrarlayarak yeni bir dizi oluşturmayı sağlayan bir işlemdir. Bu işlem, dizinin belirli boyutlarındaki tekrarlarını oluşturur. Numpy'nin `repeat()` fonksiyonu veya `tile()` fonksiyonu ile gerçekleştirilir. 1370 | 1371 | --- 1372 | 1373 | 1374 | --- 1375 | #### **1. `repeat()` Fonksiyonu ile Yineleme** 1376 | 1377 | Numpy'de `repeat()` fonksiyonu, bir diziyi belirli sayıda tekrarlayarak yeni bir dizi oluşturur. Bu fonksiyon, belirtilen eksen boyunca tekrar sayısını ve tekrar edilecek diziyi alır. 1378 | 1379 | --- 1380 | 1381 | 1382 | ```python 1383 | import numpy as np 1384 | 1385 | # Bir dizi oluşturalım 1386 | arr = np.array([1, 2, 3]) 1387 | 1388 | # Diziyi tekrarlayalım 1389 | result = np.repeat(arr, 3) # Her elemanı 3 kez tekrarla 1390 | print("repeat() Fonksiyonu ile Yineleme Sonucu:", result) # Çıktı: [1 1 1 2 2 2 3 3 3] 1391 | ``` 1392 | 1393 | repeat() Fonksiyonu ile Yineleme Sonucu: [1 1 1 2 2 2 3 3 3] 1394 | 1395 | 1396 | 1397 | --- 1398 | #### **2. `tile()` Fonksiyonu ile Yineleme** 1399 | 1400 | `tile()` fonksiyonu, bir dizinin belirli bir şekilde yinelemesini sağlar. Bu fonksiyon, belirtilen şekil boyunca diziyi kopyalar ve yeni bir dizi oluşturur. 1401 | 1402 | --- 1403 | 1404 | 1405 | ```python 1406 | # Diziyi belirli bir şekilde yineleyelim 1407 | result_tile = np.tile(arr, 3) # Diziyi 3 kez yatayda yinele 1408 | print("tile() Fonksiyonu ile Yineleme Sonucu:", result_tile) # Çıktı: [1 2 3 1 2 3 1 2 3] 1409 | ``` 1410 | 1411 | tile() Fonksiyonu ile Yineleme Sonucu: [1 2 3 1 2 3 1 2 3] 1412 | 1413 | 1414 | 1415 | --- 1416 | ### **2.5.3 İç Çarpım (Dot Product)** 1417 | 1418 | Numpy'de iç çarpım (dot product), iki vektör arasında veya bir matris ile bir vektör veya iki matris arasında yapılan matematiksel bir işlemdir. İç çarpım, vektörlerin veya matrislerin elemanlarının çarpılması ve toplanmasıyla hesaplanır. 1419 | 1420 | 1421 | --- 1422 | #### **1. İki Vektör Arasındaki İç Çarpım** 1423 | 1424 | İki vektör arasındaki iç çarpım, vektörlerin elemanları arasında yapılan çarpma işlemlerinin toplanmasıyla hesaplanır. 1425 | 1426 | --- 1427 | 1428 | 1429 | ```python 1430 | import numpy as np 1431 | 1432 | # İki vektör oluşturalım 1433 | vec1 = np.array([1, 2, 3]) 1434 | vec2 = np.array([4, 5, 6]) 1435 | 1436 | # İki vektör arasındaki iç çarpımı hesaplayalım 1437 | dot_product = np.dot(vec1, vec2) 1438 | print("İki Vektör Arasındaki İç Çarpım:", dot_product) # Çıktı: 32 1439 | ``` 1440 | 1441 | İki Vektör Arasındaki İç Çarpım: 32 1442 | 1443 | 1444 | 1445 | --- 1446 | #### **2. Matris ve Vektör Arasındaki İç Çarpım** 1447 | 1448 | Bir matris ile bir vektör arasındaki iç çarpım, matrisin satırlarıyla vektörün sütunlarının elemanları arasında yapılan çarpma işlemlerinin toplanmasıyla hesaplanır. 1449 | 1450 | --- 1451 | 1452 | 1453 | ```python 1454 | # Bir matris ve bir vektör oluşturalım 1455 | matrix = np.array([[1, 2], [3, 4], [5, 6]]) 1456 | vector = np.array([2, 3]) 1457 | 1458 | # Matris ve vektör arasındaki iç çarpımı hesaplayalım 1459 | dot_product_matrix_vector = np.dot(matrix, vector) 1460 | print("Matris ve Vektör Arasındaki İç Çarpım:", dot_product_matrix_vector) # Çıktı: [ 8 18 28] 1461 | ``` 1462 | 1463 | Matris ve Vektör Arasındaki İç Çarpım: [ 8 18 28] 1464 | 1465 | 1466 | 1467 | --- 1468 | #### **3. İki Matris Arasındaki İç Çarpım** 1469 | 1470 | İki matris arasındaki iç çarpım, matrislerin satırlarıyla sütunlarının elemanları arasında yapılan çarpma işlemlerinin toplanmasıyla hesaplanır. 1471 | 1472 | --- 1473 | 1474 | 1475 | ```python 1476 | # İki matris oluşturalım 1477 | matrix1 = np.array([[1, 2], [3, 4]]) 1478 | matrix2 = np.array([[5, 6], [7, 8]]) 1479 | 1480 | # İki matris arasındaki iç çarpımı hesaplayalım 1481 | dot_product_matrices = np.dot(matrix1, matrix2) 1482 | print("İki Matris Arasındaki İç Çarpım:\n", dot_product_matrices) 1483 | ``` 1484 | 1485 | İki Matris Arasındaki İç Çarpım: 1486 | [[19 22] 1487 | [43 50]] 1488 | 1489 | 1490 | 1491 | --- 1492 | ## **2.5.4 İşlem Fonksiyonları (np.sum(), np.prod(), np.mean() vs.)** 1493 | 1494 | Numpy'de, çeşitli işlem fonksiyonları mevcuttur. Bu fonksiyonlar, dizilerdeki elemanların toplamını, çarpımını, ortalama değerini ve diğer istatistiksel hesaplamaları gerçekleştirmek için kullanılır. En yaygın kullanılan işlem fonksiyonları arasında `np.sum()`, `np.prod()`, `np.mean()` ve benzerleri bulunur. 1495 | 1496 | 1497 | --- 1498 | #### **1. `np.sum()` Fonksiyonu** 1499 | 1500 | `np.sum()` fonksiyonu, bir dizinin elemanlarının toplamını hesaplamak için kullanılır. 1501 | 1502 | --- 1503 | 1504 | 1505 | ```python 1506 | import numpy as np 1507 | 1508 | # Bir dizi oluşturalım 1509 | arr = np.array([1, 2, 3, 4, 5]) 1510 | 1511 | # Dizinin elemanlarının toplamını hesaplayalım 1512 | total_sum = np.sum(arr) 1513 | print("Dizinin Toplamı:", total_sum) # Çıktı: 15 1514 | ``` 1515 | 1516 | 1517 | --- 1518 | #### **2. `np.prod()` Fonksiyonu** 1519 | 1520 | `np.prod()` fonksiyonu, bir dizinin elemanlarının çarpımını hesaplamak için kullanılır. 1521 | 1522 | --- 1523 | 1524 | 1525 | ```python 1526 | # Dizinin elemanlarının çarpımını hesaplayalım 1527 | total_product = np.prod(arr) 1528 | print("Dizinin Çarpımı:", total_product) # Çıktı: 120 1529 | ``` 1530 | 1531 | 1532 | --- 1533 | #### **3. `np.mean()` Fonksiyonu** 1534 | 1535 | `np.mean()` fonksiyonu, bir dizinin elemanlarının ortalama değerini hesaplamak için kullanılır. 1536 | 1537 | --- 1538 | 1539 | 1540 | ```python 1541 | # Dizinin elemanlarının ortalama değerini hesaplayalım 1542 | mean_value = np.mean(arr) 1543 | print("Dizinin Ortalaması:", mean_value) # Çıktı: 3.0 1544 | ``` 1545 | 1546 | 1547 | --- 1548 | #### **4. Diğer İşlem Fonksiyonları** 1549 | 1550 | Numpy'de birçok işlem fonksiyonu bulunur ve bu fonksiyonlar çeşitli istatistiksel hesaplamaları yapmak için kullanılır. Bazı diğer yaygın işlem fonksiyonları şunlardır: 1551 | - `np.min()`: Dizinin minimum değerini bulur. 1552 | - `np.max()`: Dizinin maksimum değerini bulur. 1553 | - `np.std()`: Dizinin standart sapmasını hesaplar. 1554 | - `np.median()`: Dizinin ortanca değerini bulur. 1555 | 1556 | Bu işlem fonksiyonları, Numpy'de veri analizi ve işlemlerinde sıkça kullanılır ve dizilerdeki verilerin çeşitli istatistiksel özelliklerini hesaplamak için önemlidir. 1557 | 1558 | --- 1559 | 1560 | # **3. Lineer Cebir İşlemleri** 1561 | 1562 | 1563 | --- 1564 | ## **3.1 Matris Çarpımı** 1565 | 1566 | Numpy'de matris çarpımı, iki matris arasındaki çarpma işlemidir. Matris çarpımı, lineer cebirde ve matris işlemlerinde sıkça kullanılan önemli bir işlemdir. Numpy'nin `np.dot()` fonksiyonu veya `@` operatörü ile matris çarpımı gerçekleştirilir. 1567 | 1568 | --- 1569 | 1570 | 1571 | --- 1572 | ### **`@` Operatörü ile Matris Çarpımı** 1573 | 1574 | `@` operatörü, Numpy'de matris çarpımı için kullanılabilir. Bu operatör, iki matrisin çarpımını daha okunabilir bir şekilde ifade etmek için kullanılır. 1575 | 1576 | --- 1577 | 1578 | 1579 | ```python 1580 | # @ operatörü ile matris çarpımını hesaplayalım 1581 | matrix_product_operator = matrix1 @ matrix2 1582 | print("Matris Çarpımı (@ operatörü ile):\n", matrix_product_operator) 1583 | ``` 1584 | 1585 | 1586 | --- 1587 | ## **3.2 Determinant ve Ters Matris Hesaplama** 1588 | 1589 | Numpy'de, bir matrisin determinantı ve ters matrisi hesaplanabilir. Determinant, bir kare matrisin bir tür ölçüsüdür ve matrisin nasıl davrandığını anlamak için önemlidir. Ters matris ise, bir matrisin tersine çarpıldığında birim matrisi veren bir matristir. 1590 | 1591 | 1592 | --- 1593 | ### **3.2.1 Determinant Hesaplama** 1594 | 1595 | Numpy'de, bir matrisin determinantını hesaplamak için `np.linalg.det()` fonksiyonu kullanılır. 1596 | 1597 | --- 1598 | 1599 | 1600 | ```python 1601 | import numpy as np 1602 | 1603 | # Bir kare matris oluşturalım 1604 | matrix = np.array([[1, 2], [3, 4]]) 1605 | 1606 | # Matrisin determinantını hesaplayalım 1607 | determinant = np.linalg.det(matrix) 1608 | print("Matrisin Determinantı:", determinant) 1609 | ``` 1610 | 1611 | Matrisin Determinantı: -2.0000000000000004 1612 | 1613 | 1614 | 1615 | --- 1616 | ### **3.2.2 Ters Matris Hesaplama** 1617 | 1618 | Numpy'de, bir matrisin tersini hesaplamak için `np.linalg.inv()` fonksiyonu kullanılır. 1619 | 1620 | --- 1621 | 1622 | 1623 | ```python 1624 | # Matrisin tersini hesaplayalım 1625 | inverse_matrix = np.linalg.inv(matrix) 1626 | print("Matrisin Tersi:\n", inverse_matrix) 1627 | ``` 1628 | 1629 | Matrisin Tersi: 1630 | [[-2. 1. ] 1631 | [ 1.5 -0.5]] 1632 | 1633 | 1634 | # **4. Universal Functions (ufuncs):** 1635 | 1636 | 1637 | --- 1638 | ## **4.1 ufuncs Nedir?** 1639 | 1640 | ufuncs (universal functions), Numpy'de evrensel işlevler olarak bilinen, dizi elemanlarında element-wise (eleman bazlı) işlemler gerçekleştiren işlevlerdir. Bu işlevler, Numpy dizilerindeki her bir elemana aynı işlemi uygulayarak hızlı ve verimli bir şekilde çalışır. 1641 | 1642 | ufuncs'ler, matematiksel operasyonlar, trigonometrik fonksiyonlar, mantıksal operasyonlar ve diğer birçok işlem için kullanılabilir. 1643 | 1644 | 1645 | --- 1646 | ## **4.2 Matematiksel İşlemler** 1647 | 1648 | Numpy'deki birçok matematiksel işlem, ufuncs kullanılarak gerçekleştirilir. Örneğin, toplama, çıkarma, çarpma, bölme gibi işlemler ufuncs aracılığıyla eleman bazlı olarak uygulanır. 1649 | 1650 | --- 1651 | 1652 | 1653 | ```python 1654 | import numpy as np 1655 | 1656 | # İki dizi oluşturalım 1657 | arr1 = np.array([1, 2, 3, 4]) 1658 | arr2 = np.array([5, 6, 7, 8]) 1659 | 1660 | # Toplama işlemi 1661 | result_addition = np.add(arr1, arr2) 1662 | 1663 | # Çarpma işlemi 1664 | result_multiplication = np.multiply(arr1, arr2) 1665 | 1666 | print("Toplama İşlemi Sonucu:", result_addition) 1667 | print("Çarpma İşlemi Sonucu:", result_multiplication) 1668 | ``` 1669 | 1670 | 1671 | --- 1672 | ## **4.3 Trigonometrik Fonksiyonlar** 1673 | 1674 | ufuncs, trigonometrik fonksiyonlar gibi matematiksel fonksiyonlar için de kullanılır. 1675 | 1676 | --- 1677 | 1678 | 1679 | ```python 1680 | # Sinüs fonksiyonu 1681 | result_sin = np.sin(arr1) 1682 | 1683 | # Kosinüs fonksiyonu 1684 | result_cos = np.cos(arr2) 1685 | 1686 | print("Sinüs Fonksiyonu Sonucu:", result_sin) 1687 | print("Kosinüs Fonksiyonu Sonucu:", result_cos) 1688 | ``` 1689 | 1690 | 1691 | --- 1692 | ## **4.4 Mantıksal İşlemler** 1693 | 1694 | Mantıksal işlemler de ufuncs aracılığıyla gerçekleştirilir. 1695 | 1696 | --- 1697 | 1698 | 1699 | ```python 1700 | # Mantıksal ve işlemi 1701 | result_and = np.logical_and(arr1 > 2, arr2 < 7) 1702 | 1703 | # Mantıksal veya işlemi 1704 | result_or = np.logical_or(arr1 > 2, arr2 < 7) 1705 | 1706 | print("Mantıksal 've' İşlemi Sonucu:", result_and) 1707 | print("Mantıksal 'veya' İşlemi Sonucu:", result_or) 1708 | ``` 1709 | -------------------------------------------------------------------------------- /numpy-tutorial.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## **1) Temel Bilgiler:**\n", 8 | "\n", 9 | "### [**1.1 Numpy Nedir?**](#11-numpy-nedir)\n", 10 | " - Numpy'nin temel amacı\n", 11 | " - Neden numpy kullanmalıyız?\n", 12 | " - Numpy'nin Özellikleri\n", 13 | " - Python listeleri ile numpy dizileri arasındaki farklar\n", 14 | "\n", 15 | "### [**1.2 Numpy Dizileri (Arrays)**](#12-numpy-dizileri-arrays)\n", 16 | " - [Numpy Arrayleri Nedir?](#121-numpy-array-nedir)\n", 17 | " - [Array Oluşturma](#122-array-oluşturma)\n", 18 | " - [np.zeros(), np.ones(), np.empty() vs.](#1221-npzeros-npones-npempty)\n", 19 | " - [np.arange(), np.linspace()](#1222-nparange-nplinspace)\n", 20 | " - [Random sayı üretimi: np.random.rand(), np.random.randn(), vs.](#1223-random-sayı-üretimi-nprandomrand-nprandomrandn)\n", 21 | " - [Array Özellikleri: Şekil, Boyut](#123-array-özellikleri-şekil-boyut)\n", 22 | " - [Dizilerin Veri Tipleri](#124-dizilerin-veri-tipleri)\n", 23 | " - [Dizilerin İndekslenmesi ve Dilimlenmesi](#125-dizilerin-i̇ndekslenmesi-ve-dilimlenmesi)\n", 24 | "\n", 25 | "--- \n", 26 | "\n", 27 | "\n", 28 | "## **2) Temel İşlemler:**\n", 29 | "\n", 30 | "### [**2.1 Dizi İşlemleri:**](#21-dizi-i̇şlemleri)\n", 31 | " - [Dizi Elemanlarına Erişim](#211-dizi-elemanlarına-erişim)\n", 32 | " - [Tek Bir Elemana Erişim](#2111-tek-bir-elemana-erişim)\n", 33 | " - [Dilimleme İle Erişim](#2112-dilimleme-i̇le-erişim)\n", 34 | " - [Koşullu İndeksleme](#2113-koşullu-i̇ndeksleme)\n", 35 | " - [Çok Boyutlu Dizilerde Erişim](#2114-çok-boyutlu-dizilerde-erişim)\n", 36 | "\n", 37 | " - [Aritmetik İşlemler](#212-aritmetik-i̇şlemler)\n", 38 | " - [Temel Aritmetik İşlemler](#2121-temel-aritmetik-i̇şlemler)\n", 39 | " - [Üstel ve Logaritmik İşlemler](#2122-üstel-ve-logaritmik-i̇şlemler)\n", 40 | " - [İleri Düzey İşlemler](#2123-i̇leri-düzey-i̇şlemler)\n", 41 | "\n", 42 | " - [Rastgele Sayılar Üretme](#213-rastgele-sayılar-üretme)\n", 43 | " - [np.random.rand()](#2131-nprandomrand)\n", 44 | " - [seed() Fonksiyonu](#2132-seed-fonksiyonu)\n", 45 | " - [np.random.randint()](#2133-nprandomrandint)\n", 46 | " - [np.random.randn()](#2134-nprandomrandn)\n", 47 | " - [np.random.choice()](#2135-nprandomchoice)\n", 48 | "\n", 49 | "### [**2.2 Array Şekil Değiştirme**](#22-array-şekil-değiştirme)\n", 50 | " - [Dizinin Şeklini Değiştirme](#221-dizinin-şeklini-değiştirme)\n", 51 | " - [`reshape()` Fonksiyonu](#2211-reshape-fonksiyonu)\n", 52 | " - [`resize()` Fonksiyonu](#2212-resize-fonksiyonu)\n", 53 | " - [`reshape()` ve `-1` Kullanımı](#2213-reshape-ve--1-kullanımı)\n", 54 | " - [Düzleştirme: flatten() Fonksiyonu](#2214-düzleştirme-flatten-fonksiyonu)\n", 55 | " - [`ravel()` Fonksiyonu](#2215-ravel-fonksiyonu)\n", 56 | "\n", 57 | " - [Dizileri Birleştirme ve Ayırma](#222-dizileri-birleştirme-ve-ayırma)\n", 58 | " - [`concatenate()` Fonksiyonu](#2221-concatenate-fonksiyonu)\n", 59 | " - [`stack()` Fonksiyonu](#2222-stack-fonksiyonu)\n", 60 | " - [`vstack()` ve `hstack()` Fonksiyonları](#2223-vstack-ve-hstack-fonksiyonları)\n", 61 | " - [`split()` Fonksiyonu](#2224-split-fonksiyonu)\n", 62 | " - [`vsplit()` ve `hsplit()` Fonksiyonları](#2225-vsplit-ve-hsplit-fonksiyonları)\n", 63 | "\n", 64 | "\n", 65 | "### [**2.3 Veri Tipi Dönüşümleri**](#23-veri-tipi-dönüşümleri)\n", 66 | " - [astype() Fonksiyonu](#231-astype-fonksiyonu)\n", 67 | " - [asarray() Fonksiyonu](#232-asarray-fonksiyonu)\n", 68 | " - [Veri Tipi Sınırlamaları ve İşlem Önerileri](#233-veri-tipi-sınırlamaları-ve-i̇şlem-önerileri)\n", 69 | "\n", 70 | "### [**2.4 Fancy Indexing:**](#24-fancy-indexing)\n", 71 | " - [Tek Boyutlu Fancy Indexing](#241-tek-boyutlu-fancy-indexing)\n", 72 | " - [İki Boyutlu Fancy Indexing](#242-i̇ki-boyutlu-fancy-indexing)\n", 73 | " - [Maskelerle Indexleme](#243-maskelerle-indexleme)\n", 74 | " - [Boolean Maskelerle Indexleme](#2431-boolean-maskelerle-indexleme)\n", 75 | " - [Koşul İfadeleri ile Indexleme](#2432-koşul-i̇fadeleri-ile-indexleme)\n", 76 | "\n", 77 | "### [**2.5 Array Operasyonları:**](#25-array-operasyonları)\n", 78 | " - [Broadcasting (Yayılma)](#251-broadcasting-yayılma)\n", 79 | " - [Yayılma Kuralları](#2511-broadcasting-kuralları)\n", 80 | " - [Örneklerle Yayılma Kullanımı](#2512-örneklerle-yayılma-kullanımı)\n", 81 | " - [Dizi Yineleme (Repeating)](#252-dizi-yineleme-repeating)\n", 82 | " - [İç Çarpım (dot product)](#253-i̇ç-çarpım-dot-product)\n", 83 | " - [İşlem fonksiyonları (np.sum(), np.prod(), np.mean() vs.)](#254-i̇şlem-fonksiyonları-npsum-npprod-npmean-vs)\n", 84 | "\n", 85 | "---\n", 86 | "\n", 87 | "## [**3. Lineer Cebir İşlemleri**](#3-lineer-cebir-i̇şlemleri)\n", 88 | " - [Matris çarpımı](#31-matris-çarpımı)\n", 89 | " - [Determinant ve ters matris hesaplama](#32-determinant-ve-ters-matris-hesaplama)\n", 90 | "\n", 91 | "\n", 92 | "## [**4. Universal Functions (ufuncs):**](#4-universal-functions-ufuncs)\n", 93 | "\n", 94 | "---" 95 | ] 96 | }, 97 | { 98 | "cell_type": "markdown", 99 | "metadata": {}, 100 | "source": [ 101 | "# **Temel Bilgiler**" 102 | ] 103 | }, 104 | { 105 | "cell_type": "markdown", 106 | "metadata": {}, 107 | "source": [ 108 | "## **1.1 Numpy Nedir?**\n", 109 | "\n", 110 | "Numpy, Python programlama dili için temel bir kütüphanedir ve bilimsel hesaplama ve veri işleme için kullanılır. Numpy'nin temel amacı, Python'da veri işlemesi ve hesaplamaları yapmak için hızlı ve etkili bir şekilde çalışabilecek yüksek performanslı çok boyutlu diziler ve matematiksel işlevler sunmaktır.\n", 111 | "\n", 112 | "### **Neden Numpy Kullanmalıyız?**\n", 113 | "\n", 114 | "Numpy'nin kullanılmasının bazı avantajları şunlardır:\n", 115 | "- **Hızlı ve Verimli İşlemler:** Numpy, C ve Fortran dilinde yazılmış alt seviye optimizasyonlar kullanır, bu da Python'da yavaş olan bazı işlemleri hızlandırır.\n", 116 | "- **Diziler Üzerinde Hızlı İşlemler:** Numpy dizileri, Python listelerine göre daha hızlı ve verimli işlemler yapmak için optimize edilmiştir.\n", 117 | "- **Geniş Fonksiyonellik:** Numpy, matematiksel işlevler, rastgele sayı üretimi, lineer cebir işlemleri gibi birçok faydalı fonksiyon ve işlev içerir.\n", 118 | "- **Veri Analizi ve Bilimsel Hesaplama:** Numpy, veri analizi, bilimsel hesaplama, simülasyonlar ve modeller gibi çeşitli alanlarda yaygın olarak kullanılır.\n", 119 | "\n", 120 | "### **Numpy'nin Özellikleri**\n", 121 | "\n", 122 | "Numpy'nin bazı temel özellikleri şunlardır:\n", 123 | "- **Çok Boyutlu Diziler (Arrays):** Numpy, çok boyutlu dizileri destekler. Bu, tek boyutlu vektörlerden çok boyutlu matrislere kadar geniş bir veri yelpazesini kapsar.\n", 124 | "- **Matematiksel İşlevler:** Numpy, temel matematiksel işlevler (sin, cos, exp vb.) ve işlemler (toplama, çıkarma, çarpma, bölme vb.) için fonksiyonlar içerir.\n", 125 | "- **Yüksek Performanslı Hesaplama:** Numpy, vektörize edilmiş işlemler ve alt seviye optimizasyonlar kullanarak yüksek performanslı hesaplamalar sağlar.\n", 126 | "- **Geniş Kullanım Alanı:** Numpy, veri analizi, bilimsel hesaplama, makine öğrenmesi, görüntü işleme gibi birçok alanda kullanılır.\n", 127 | "\n", 128 | "### **Python Listeleri ile Numpy Dizileri Arasındaki Farklar**\n", 129 | "\n", 130 | "Numpy dizileri ile Python listeleri arasındaki temel farklar şunlardır:\n", 131 | "1. **Performans:** Numpy dizileri, Python listelerine göre daha hızlı ve verimli işlemler yapar. Bu, özellikle büyük veri kümeleri üzerinde çalışırken belirgin hale gelir.\n", 132 | "2. **Veri Tipi ve Boyut Kontrolü:** Numpy dizileri, elemanları aynı veri tipinde tutar ve sabit bir boyuta sahiptir. Bu, veri kümeleri üzerinde homojen işlemler yapmayı kolaylaştırır.\n", 133 | "3. **Matematiksel İşlemler:** Numpy dizileri, matematiksel işlemler için optimize edilmiş vektörize edilmiş işlemleri destekler. Bu, Python listelerinden daha hızlı ve daha kolay matematiksel işlemler yapmayı sağlar.\n", 134 | "4. **Bellek Yönetimi:** Numpy dizileri, veriyi daha etkin bir şekilde bellekte depolar ve işler. Bu, bellek kullanımını optimize eder ve verimliliği artırır.\n", 135 | "\n", 136 | "\n", 137 | "| Numpy Dizileri | Python Listeleri |\n", 138 | "|--------------------------------------------|--------------------------------------------|\n", 139 | "| Numpy dizileri aynı türde verileri içerir. | Python listeleri farklı türde verileri içerebilir. |\n", 140 | "| Numpy dizileri boyutları sabittir. | Python listeleri dinamik boyutlara sahiptir. |\n", 141 | "| Numpy dizilerinde vektörleştirilmiş işlemler yapılabilir, bu da performansı artırır. | Python listelerinde döngüler kullanılarak işlemler yapılır, bu performansı düşürebilir. |\n", 142 | "\n", 143 | "---" 144 | ] 145 | }, 146 | { 147 | "cell_type": "markdown", 148 | "metadata": {}, 149 | "source": [ 150 | "## **1.2 Numpy Dizileri (Arrays)**\n", 151 | "\n", 152 | "Numpy, Python'da bilimsel hesaplamalar yapmak için kullanılan temel bir kütüphanedir. En önemli özelliklerinden biri, çok boyutlu (çok boyutlu) dizilerle çalışabilme yeteneğidir. Bu çok boyutlu dizilere \"Numpy array\" denir.\n", 153 | "\n", 154 | "---\n", 155 | "\n", 156 | "### **1.2.1 Numpy Array Nedir?**\n", 157 | "\n", 158 | "Numpy array, homojen veri tiplerinden oluşan bir grid yapısıdır. Bir numpy array, aynı türde veriler içerir ve boyutları sabittir. Numpy array'leri, Python listelerine benzerdir ancak daha etkin ve hızlıdır.\n", 159 | "\n", 160 | "#### **Numpy Array Özellikleri**\n", 161 | "\n", 162 | "1. **Homojen Veri Tipi:**\n", 163 | " - Numpy array'leri, aynı türde verileri içerir. Bu, veri işleme ve matematiksel operasyonlar için çok önemlidir çünkü her eleman aynı veri türüne sahiptir.\n", 164 | "\n", 165 | "2. **Sabit Boyut:**\n", 166 | " - Numpy array'lerinin boyutları oluşturulduktan sonra değiştirilemez. Bu, bellek kullanımını optimize eder ve hızlı işlemler sağlar.\n", 167 | "\n", 168 | "3. **Hızlı ve Verimli:**\n", 169 | " - Numpy, C altında derlenmiş bir kütüphanedir, bu da işlemlerin hızlı ve verimli bir şekilde yapılmasını sağlar. Büyük veri kümeleriyle çalışırken performans avantajı sağlar.\n", 170 | "\n", 171 | "4. **Çok Boyutlu Yetenek:**\n", 172 | " - Numpy array'leri, tek boyutlu, iki boyutlu ve daha fazla boyutta olabilir. Bu, matematiksel ve bilimsel hesaplamalarda çok yönlü kullanım sağlar.\n", 173 | "\n", 174 | "---\n", 175 | "\n", 176 | "#### **Python Listeleri ile Numpy Arrayleri Arasındaki Farklar**\n", 177 | "\n", 178 | "Numpy array'leri ve Python listeleri arasındaki ana farklar şunlardır:\n", 179 | "\n", 180 | "- **Performans:**\n", 181 | " - Numpy array'leri, vektörleştirilmiş operasyonlar ve optimize edilmiş bellek kullanımı sayesinde Python listelerinden daha hızlıdır.\n", 182 | " \n", 183 | "- **Veri Tipi Kontrolü:**\n", 184 | " - Numpy array'leri homojen veri tipleri içerirken, Python listeleri heterojen veri tipleri içerebilir.\n", 185 | " \n", 186 | "- **Boyut Değiştirme:**\n", 187 | " - Numpy array'lerinin boyutları oluşturulduktan sonra değiştirilemezken, Python listelerinin boyutu dinamik olarak değiştirilebilir.\n", 188 | "\n", 189 | "- **Matematiksel İşlemler:**\n", 190 | " - Numpy array'leri, matematiksel işlemleri vektörleştirme yeteneği ile desteklerken, Python listeleri bunu doğrudan desteklemez.\n", 191 | "\n", 192 | "Bu farklar, Numpy'nin Python listelerine tercih edilmesinin temel nedenlerindendir. Numpy array'leri, bilimsel hesaplamalar, veri analizi ve makine öğrenimi gibi uygulamalarda yaygın olarak kullanılmaktadır." 193 | ] 194 | }, 195 | { 196 | "cell_type": "markdown", 197 | "metadata": {}, 198 | "source": [ 199 | "\n", 200 | "---\n", 201 | "### **1.2.2 Array Oluşturma**\n", 202 | "\n", 203 | "Numpy kütüphanesi, çeşitli yöntemlerle array oluşturmayı sağlar. Bu yöntemler, farklı ihtiyaçlara göre farklı türde arrayler oluşturmanıza olanak tanır.\n", 204 | "\n", 205 | "#### **1.2.2.1 `np.zeros()`, `np.ones()`, `np.empty()`**\n", 206 | "\n", 207 | "Bu fonksiyonlar, belirli bir şekilde sıfırlar, birler veya boş değerler içeren arrayler oluşturur. Temel kullanımı aşağıdaki gibidir:\n", 208 | "\n", 209 | "- `np.zeros(shape)`: Belirtilen boyutta sıfırlardan oluşan bir array oluşturur.\n", 210 | "- `np.ones(shape)`: Belirtilen boyutta birlerden oluşan bir array oluşturur.\n", 211 | "- `np.empty(shape)`: Belirtilen boyutta boş değerler içeren bir array oluşturur. Bu array'in değerleri, bellekteki mevcut duruma bağlı olarak değişkenlik gösterebilir.\n", 212 | "---" 213 | ] 214 | }, 215 | { 216 | "cell_type": "code", 217 | "execution_count": 11, 218 | "metadata": {}, 219 | "outputs": [ 220 | { 221 | "name": "stdout", 222 | "output_type": "stream", 223 | "text": [ 224 | "[[0. 0. 0.]\n", 225 | " [0. 0. 0.]] \n", 226 | "\n", 227 | "[[1. 1.]\n", 228 | " [1. 1.]\n", 229 | " [1. 1.]] \n", 230 | "\n", 231 | "[[2. 1. ]\n", 232 | " [1.5 0.5]]\n" 233 | ] 234 | } 235 | ], 236 | "source": [ 237 | "import numpy as np\n", 238 | "\n", 239 | "zeros_array = np.zeros((2, 3)) # 2x3 boyutunda sıfırlardan oluşan array\n", 240 | "print(zeros_array, \"\\n\")\n", 241 | "# Çıktı:\n", 242 | "# [[0. 0. 0.]\n", 243 | "# [0. 0. 0.]]\n", 244 | "\n", 245 | "ones_array = np.ones((3, 2)) # 3x2 boyutunda birlerden oluşan array\n", 246 | "print(ones_array,\"\\n\")\n", 247 | "# Çıktı:\n", 248 | "# [[1. 1.]\n", 249 | "# [1. 1.]\n", 250 | "# [1. 1.]]\n", 251 | "\n", 252 | "empty_array = np.empty((2, 2)) # 2x2 boyutunda boş değerler içeren array\n", 253 | "print(empty_array)\n", 254 | "# Çıktı:\n", 255 | "# [[4.67296746e-307 1.69121096e-306]\n", 256 | "# [8.34441742e-308 1.24611470e-306]]" 257 | ] 258 | }, 259 | { 260 | "cell_type": "markdown", 261 | "metadata": {}, 262 | "source": [ 263 | "\n", 264 | "---\n", 265 | "\n", 266 | "#### **1.2.2.2 `np.arange()`, `np.linspace()`**\n", 267 | "\n", 268 | "Bu fonksiyonlar, belirli bir aralıktaki sayılarla dolu arrayler oluşturur.\n", 269 | "\n", 270 | "- `np.arange(start, stop, step)`: Belirli bir aralıktaki sayıları belirtilen adımlarla içeren bir array oluşturur.\n", 271 | "- `np.linspace(start, stop, num)`: Belirli bir aralıktaki belirli sayıda eşit aralıklı sayıları içeren bir array oluşturur.\n", 272 | "\n", 273 | "---" 274 | ] 275 | }, 276 | { 277 | "cell_type": "code", 278 | "execution_count": 12, 279 | "metadata": {}, 280 | "outputs": [ 281 | { 282 | "name": "stdout", 283 | "output_type": "stream", 284 | "text": [ 285 | "[0 2 4 6 8] \n", 286 | "\n", 287 | "[ 0. 2.5 5. 7.5 10. ]\n" 288 | ] 289 | } 290 | ], 291 | "source": [ 292 | "import numpy as np\n", 293 | "\n", 294 | "range_array = np.arange(0, 10, 2) # 0'dan 10'a kadar 2'şer artan sayılar\n", 295 | "print(range_array, \"\\n\")\n", 296 | "# Çıktı: [0 2 4 6 8]\n", 297 | "\n", 298 | "linspace_array = np.linspace(0, 10, 5) # 0'dan 10'a kadar 5 eşit aralıklı sayılar\n", 299 | "print(linspace_array)\n", 300 | "# Çıktı: [ 0. 2.5 5. 7.5 10. ]" 301 | ] 302 | }, 303 | { 304 | "cell_type": "markdown", 305 | "metadata": {}, 306 | "source": [ 307 | "\n", 308 | "---\n", 309 | "#### **1.2.2.3 Random Sayı Üretimi: `np.random.rand()`, `np.random.randn()`**\n", 310 | "\n", 311 | "Bu fonksiyonlar, belirli bir boyutta rastgele sayılar içeren arrayler oluşturur.\n", 312 | "\n", 313 | "- `np.random.rand(d0, d1, ..., dn)`: 0 ile 1 arasında uniform dağılımlı rastgele sayılar içeren bir array oluşturur.\n", 314 | "- `np.random.randn(d0, d1, ..., dn)`: Ortalaması 0 ve standart sapması 1 olan normal dağılımlı rastgele sayılar içeren bir array oluşturur.\n", 315 | "\n", 316 | "---" 317 | ] 318 | }, 319 | { 320 | "cell_type": "code", 321 | "execution_count": 13, 322 | "metadata": {}, 323 | "outputs": [ 324 | { 325 | "name": "stdout", 326 | "output_type": "stream", 327 | "text": [ 328 | "[[0.66083539 0.07326587]\n", 329 | " [0.11192756 0.91149177]] \n", 330 | "\n", 331 | "[[ 0.14298326 1.20668909]\n", 332 | " [-0.69041712 0.67672093]]\n" 333 | ] 334 | } 335 | ], 336 | "source": [ 337 | "import numpy as np\n", 338 | "\n", 339 | "random_array_uniform = np.random.rand(2, 2) # 2x2 boyutunda uniform dağılımlı rastgele sayılar\n", 340 | "print(random_array_uniform,\"\\n\")\n", 341 | "\n", 342 | "\n", 343 | "random_array_normal = np.random.randn(2, 2) # 2x2 boyutunda normal dağılımlı rastgele sayılar\n", 344 | "print(random_array_normal)" 345 | ] 346 | }, 347 | { 348 | "cell_type": "markdown", 349 | "metadata": {}, 350 | "source": [ 351 | "\n", 352 | "---\n", 353 | "### **1.2.3 Array Özellikleri: Şekil, Boyut**\n", 354 | "\n", 355 | "Numpy array'lerinin şekli ve boyutu, array'in yapısını ve içerdiği veri miktarını tanımlar. Bu özellikler, array üzerinde işlem yaparken ve verileri manipüle ederken oldukça önemlidir.\n", 356 | "\n", 357 | "---\n", 358 | "#### **Array Şekli (Shape)**\n", 359 | "\n", 360 | "Bir array'in şekli, her boyuttaki eleman sayısını içeren bir tuple'dır. Örneğin, bir 2x3 boyutundaki array'in şekli `(2, 3)` şeklinde ifade edilir.\n", 361 | "\n", 362 | "---\n", 363 | "#### **Array Boyutu (Dimension)**\n", 364 | "\n", 365 | "Bir array'in boyutu, içerdiği boyut sayısını ifade eder. Örneğin, 2x3 boyutundaki bir array 2 boyutlu (2D) olarak kabul edilir.\n", 366 | "\n", 367 | "---" 368 | ] 369 | }, 370 | { 371 | "cell_type": "code", 372 | "execution_count": 14, 373 | "metadata": {}, 374 | "outputs": [ 375 | { 376 | "name": "stdout", 377 | "output_type": "stream", 378 | "text": [ 379 | "Array Şekli (Shape): (2, 3)\n", 380 | "Array Boyutu (Dimension): 2\n" 381 | ] 382 | } 383 | ], 384 | "source": [ 385 | "import numpy as np\n", 386 | "\n", 387 | "# 2x3 boyutunda bir array oluşturalım\n", 388 | "my_array = np.array([[1, 2, 3],\n", 389 | " [4, 5, 6]])\n", 390 | "\n", 391 | "print(\"Array Şekli (Shape):\", my_array.shape) # Çıktı: (2, 3)\n", 392 | "print(\"Array Boyutu (Dimension):\", my_array.ndim) # Çıktı: 2" 393 | ] 394 | }, 395 | { 396 | "cell_type": "markdown", 397 | "metadata": {}, 398 | "source": [ 399 | "#### **Reshaping (Yeniden Şekillendirme)**\n", 400 | "\n", 401 | "Numpy, `reshape()` fonksiyonu aracılığıyla mevcut bir array'in şeklini değiştirmenize olanak tanır. Bu işlem, array'in boyutunu değiştirmez, sadece şeklini yeniden düzenler." 402 | ] 403 | }, 404 | { 405 | "cell_type": "code", 406 | "execution_count": 15, 407 | "metadata": {}, 408 | "outputs": [ 409 | { 410 | "name": "stdout", 411 | "output_type": "stream", 412 | "text": [ 413 | "Yeniden Şekillendirilmiş Array:\n", 414 | "[[1 2]\n", 415 | " [3 4]\n", 416 | " [5 6]]\n" 417 | ] 418 | } 419 | ], 420 | "source": [ 421 | "import numpy as np\n", 422 | "\n", 423 | "# 2x3 boyutunda bir array oluşturalım\n", 424 | "my_array = np.array([[1, 2, 3],\n", 425 | " [4, 5, 6]])\n", 426 | "\n", 427 | "# Array'in şeklini (2, 3)ten (3, 2)'ye çevirelim\n", 428 | "reshaped_array = my_array.reshape((3, 2))\n", 429 | "\n", 430 | "print(\"Yeniden Şekillendirilmiş Array:\")\n", 431 | "print(reshaped_array)" 432 | ] 433 | }, 434 | { 435 | "cell_type": "markdown", 436 | "metadata": {}, 437 | "source": [ 438 | "* Yukarıdaki örnekte, `reshape()` fonksiyonu kullanılarak `my_array` adlı array'in şekli (2, 3)'ten (3, 2)'ye çevrildi." 439 | ] 440 | }, 441 | { 442 | "cell_type": "markdown", 443 | "metadata": {}, 444 | "source": [ 445 | "#### **Array'in Boyutunu Değiştirme**\n", 446 | "\n", 447 | "Numpy, `reshape()` fonksiyonu dışında array'in boyutunu değiştiren `resize()` fonksiyonunu da sağlar. Bu fonksiyon, mevcut array'i değiştirir ve istenen boyuta uyacak şekilde genişletir veya kısaltır." 448 | ] 449 | }, 450 | { 451 | "cell_type": "code", 452 | "execution_count": 16, 453 | "metadata": {}, 454 | "outputs": [ 455 | { 456 | "name": "stdout", 457 | "output_type": "stream", 458 | "text": [ 459 | "Yeniden Boyutlandırılmış Array:\n", 460 | "[[1 2 3 4]\n", 461 | " [5 6 1 2]\n", 462 | " [3 4 5 6]]\n" 463 | ] 464 | } 465 | ], 466 | "source": [ 467 | "import numpy as np\n", 468 | "\n", 469 | "# 2x3 boyutunda bir array oluşturalım\n", 470 | "my_array = np.array([[1, 2, 3],\n", 471 | " [4, 5, 6]])\n", 472 | "\n", 473 | "# Array'in boyutunu (3, 4)'e değiştirelim\n", 474 | "resized_array = np.resize(my_array, (3, 4))\n", 475 | "\n", 476 | "print(\"Yeniden Boyutlandırılmış Array:\")\n", 477 | "print(resized_array)" 478 | ] 479 | }, 480 | { 481 | "cell_type": "markdown", 482 | "metadata": {}, 483 | "source": [ 484 | "* Yukarıdaki örnekte, `resize()` fonksiyonu kullanılarak `my_array` adlı array'in boyutu (3, 4)'e değiştirildi." 485 | ] 486 | }, 487 | { 488 | "cell_type": "markdown", 489 | "metadata": {}, 490 | "source": [ 491 | "### **1.2.4 Dizilerin Veri Tipleri**\n", 492 | "\n", 493 | "Numpy dizileri, homojen veri tipleriyle (aynı tipte verileri içerir) çalışır. Bu, her bir öğenin aynı veri tipine sahip olması gerektiği anlamına gelir. Numpy, farklı türlerde veri tiplerini destekler ve her bir veri tipi farklı boyut ve işlemlere izin verir.\n", 494 | "\n", 495 | "#### **Numpy Veri Tipleri:**\n", 496 | "\n", 497 | "1. **int**: Tam sayılar.\n", 498 | "2. **float**: Ondalık sayılar.\n", 499 | "3. **complex**: Karmaşık sayılar.\n", 500 | "4. **bool**: Mantıksal (Boolean) değerler.\n", 501 | "5. **string**: Karakter dizileri.\n", 502 | "6. **object**: Python nesneleri için genel veri tipi.\n", 503 | "7. **datetime**: Tarih ve saat veri tipleri.\n", 504 | "\n", 505 | "#### **Veri Tipi Belirtme**\n", 506 | "\n", 507 | "Numpy, bir dizi oluştururken veya bir diziye dönüştürürken veri tipini belirlemenize izin verir. Bu, bellek kullanımını optimize etmenize ve beklenmeyen sonuçlardan kaçınmanıza olanak tanır." 508 | ] 509 | }, 510 | { 511 | "cell_type": "code", 512 | "execution_count": 17, 513 | "metadata": {}, 514 | "outputs": [ 515 | { 516 | "name": "stdout", 517 | "output_type": "stream", 518 | "text": [ 519 | "Float tipinde dizi: [1. 2. 3.]\n", 520 | "Dönüştürülen dizi: [1. 2. 3.]\n" 521 | ] 522 | } 523 | ], 524 | "source": [ 525 | "import numpy as np\n", 526 | "\n", 527 | "# Diziyi oluştururken veri tipini belirleme\n", 528 | "my_array = np.array([1, 2, 3], dtype=float)\n", 529 | "print(\"Float tipinde dizi:\", my_array)\n", 530 | "\n", 531 | "# Dönüştürme işlemi sırasında veri tipini belirleme\n", 532 | "converted_array = np.array([1, 2, 3], dtype=float)\n", 533 | "print(\"Dönüştürülen dizi:\", converted_array)" 534 | ] 535 | }, 536 | { 537 | "cell_type": "markdown", 538 | "metadata": {}, 539 | "source": [] 540 | }, 541 | { 542 | "cell_type": "markdown", 543 | "metadata": {}, 544 | "source": [ 545 | "### **1.2.5 Dizilerin İndekslenmesi ve Dilimlenmesi**\n", 546 | "\n", 547 | "Numpy dizileri, Python listelerine benzer şekilde indekslenir ve dilimlenir. Bu işlemler, belirli bir elemana erişmek veya belirli bir alt küme oluşturmak için kullanılır. Numpy, çok boyutlu dizilerle çalışırken bu işlemleri daha da güçlendirir.\n", 548 | "\n", 549 | "#### **1.2.5.1 İndeksleme**\n", 550 | "\n", 551 | "Numpy dizileri, 0'dan başlayarak indekslenir. Bir dizinin belirli bir elemanına erişmek için indeks numarasını kullanırız." 552 | ] 553 | }, 554 | { 555 | "cell_type": "code", 556 | "execution_count": 18, 557 | "metadata": {}, 558 | "outputs": [ 559 | { 560 | "name": "stdout", 561 | "output_type": "stream", 562 | "text": [ 563 | "1\n", 564 | "3\n" 565 | ] 566 | } 567 | ], 568 | "source": [ 569 | "import numpy as np\n", 570 | "\n", 571 | "# 1D dizinin oluşturulması\n", 572 | "arr = np.array([1, 2, 3, 4, 5])\n", 573 | "\n", 574 | "# İndeksleme\n", 575 | "print(arr[0]) # Çıktı: 1\n", 576 | "print(arr[2]) # Çıktı: 3" 577 | ] 578 | }, 579 | { 580 | "cell_type": "markdown", 581 | "metadata": {}, 582 | "source": [ 583 | "#### **1.2.5.2 Dilimleme (Slicing)**\n", 584 | "\n", 585 | "Dilimleme, bir dizinin belirli bir alt kümesini seçmek için kullanılır. Numpy dizilerinde dilimleme, Python listelerinden çok benzer şekilde çalışır. `[start:stop:step]` formülü kullanılır. Herhangi bir parametre belirtilmezse, varsayılan değerler kullanılır (başlangıç: 0, durdurma: son, adım: 1)." 586 | ] 587 | }, 588 | { 589 | "cell_type": "code", 590 | "execution_count": 19, 591 | "metadata": {}, 592 | "outputs": [ 593 | { 594 | "name": "stdout", 595 | "output_type": "stream", 596 | "text": [ 597 | "[2 3 4]\n", 598 | "[1 2 3]\n", 599 | "[1 3 5]\n" 600 | ] 601 | } 602 | ], 603 | "source": [ 604 | "import numpy as np\n", 605 | "\n", 606 | "# 1D dizinin oluşturulması\n", 607 | "arr = np.array([1, 2, 3, 4, 5])\n", 608 | "\n", 609 | "# Dilimleme\n", 610 | "print(arr[1:4]) # Çıktı: [2 3 4]\n", 611 | "print(arr[:3]) # Çıktı: [1 2 3]\n", 612 | "print(arr[::2]) # Çıktı: [1 3 5]" 613 | ] 614 | }, 615 | { 616 | "cell_type": "markdown", 617 | "metadata": {}, 618 | "source": [ 619 | "#### **1.2.5.3 Çok Boyutlu Dizilerde İndeksleme ve Dilimleme**\n", 620 | "\n", 621 | "Çok boyutlu dizilerde, her boyuta ait bir indeks veya dilimleme kullanabiliriz. Her boyut için indeksleme ve dilimleme işlemleri virgülle ayrılır." 622 | ] 623 | }, 624 | { 625 | "cell_type": "code", 626 | "execution_count": 20, 627 | "metadata": {}, 628 | "outputs": [ 629 | { 630 | "name": "stdout", 631 | "output_type": "stream", 632 | "text": [ 633 | "1\n", 634 | "6\n", 635 | "[[2 3]\n", 636 | " [5 6]]\n" 637 | ] 638 | } 639 | ], 640 | "source": [ 641 | "import numpy as np\n", 642 | "\n", 643 | "# 2D dizinin oluşturulması\n", 644 | "arr = np.array([[1, 2, 3],\n", 645 | " [4, 5, 6],\n", 646 | " [7, 8, 9]])\n", 647 | "\n", 648 | "# İndeksleme ve Dilimleme\n", 649 | "print(arr[0, 0]) # Çıktı: 1 (1. satırın 1. sütunu)\n", 650 | "print(arr[1, 2]) # Çıktı: 6 (2. satırın 3. sütunu)\n", 651 | "print(arr[:2, 1:]) # Çıktı: [[2 3]\n", 652 | " # [5 6]]" 653 | ] 654 | }, 655 | { 656 | "cell_type": "markdown", 657 | "metadata": {}, 658 | "source": [ 659 | "# **Temel İşlemler**" 660 | ] 661 | }, 662 | { 663 | "cell_type": "markdown", 664 | "metadata": {}, 665 | "source": [ 666 | "## **2.1 Dizi İşlemleri**" 667 | ] 668 | }, 669 | { 670 | "cell_type": "markdown", 671 | "metadata": {}, 672 | "source": [ 673 | "### **2.1.1 Dizi Elemanlarına Erişim**\n", 674 | "\n", 675 | "Numpy dizilerinde, belirli elemanlara erişmek için çeşitli yöntemler bulunmaktadır. Bu yöntemler, tek bir elemana, belirli bir alt kümeye veya belirli bir koşulu sağlayan elemanlara erişmek için kullanılır. İşte farklı yöntemler ve örnekler:" 676 | ] 677 | }, 678 | { 679 | "cell_type": "markdown", 680 | "metadata": {}, 681 | "source": [ 682 | "#### **2.1.1.1 Tek Bir Elemana Erişim**\n", 683 | "\n", 684 | "Tek bir elemana erişmek için, dizinin indeksini belirtiriz. Numpy dizileri, 0'dan başlayarak indekslenir." 685 | ] 686 | }, 687 | { 688 | "cell_type": "code", 689 | "execution_count": 21, 690 | "metadata": {}, 691 | "outputs": [ 692 | { 693 | "name": "stdout", 694 | "output_type": "stream", 695 | "text": [ 696 | "Birinci eleman: 1\n", 697 | "Beşinci eleman: 5\n" 698 | ] 699 | } 700 | ], 701 | "source": [ 702 | "import numpy as np\n", 703 | "\n", 704 | "# 1D dizi oluşturma\n", 705 | "arr = np.array([1, 2, 3, 4, 5])\n", 706 | "\n", 707 | "# Birinci elemana erişim\n", 708 | "print(\"Birinci eleman:\", arr[0]) # Çıktı: 1\n", 709 | "\n", 710 | "# Beşinci elemana erişim\n", 711 | "print(\"Beşinci eleman:\", arr[4]) # Çıktı: 5" 712 | ] 713 | }, 714 | { 715 | "cell_type": "markdown", 716 | "metadata": {}, 717 | "source": [ 718 | "---\n", 719 | "#### **2.1.1.2 Dilimleme İle Erişim**\n", 720 | "\n", 721 | "Dilimleme, belirli bir alt kümenin seçilmesini sağlar. Başlangıç ve bitiş indeksleriyle belirtilen dilimler kullanılarak erişim yapılır.\n", 722 | "\n", 723 | "---" 724 | ] 725 | }, 726 | { 727 | "cell_type": "code", 728 | "execution_count": 22, 729 | "metadata": {}, 730 | "outputs": [ 731 | { 732 | "name": "stdout", 733 | "output_type": "stream", 734 | "text": [ 735 | "İkinci ve üçüncü elemanlar: [2 3]\n", 736 | "Tüm elemanlar: [1 2 3 4 5]\n" 737 | ] 738 | } 739 | ], 740 | "source": [ 741 | "import numpy as np\n", 742 | "\n", 743 | "# 1D dizi oluşturma\n", 744 | "arr = np.array([1, 2, 3, 4, 5])\n", 745 | "\n", 746 | "# İkinci ve üçüncü elemanlara erişim\n", 747 | "print(\"İkinci ve üçüncü elemanlar:\", arr[1:3]) # Çıktı: [2 3]\n", 748 | "\n", 749 | "# Tüm elemanlara erişim\n", 750 | "print(\"Tüm elemanlar:\", arr[:]) # Çıktı: [1 2 3 4 5]" 751 | ] 752 | }, 753 | { 754 | "cell_type": "markdown", 755 | "metadata": {}, 756 | "source": [ 757 | "---\n", 758 | "#### **2.1.1.3 Koşullu İndeksleme**\n", 759 | "\n", 760 | "Koşullu indeksleme, belirli bir koşulu sağlayan elemanları seçmek için kullanılır.\n", 761 | "\n", 762 | "\n", 763 | "---" 764 | ] 765 | }, 766 | { 767 | "cell_type": "code", 768 | "execution_count": 23, 769 | "metadata": {}, 770 | "outputs": [ 771 | { 772 | "name": "stdout", 773 | "output_type": "stream", 774 | "text": [ 775 | "3'ten büyük elemanlar: [4 5]\n" 776 | ] 777 | } 778 | ], 779 | "source": [ 780 | "import numpy as np\n", 781 | "\n", 782 | "# 1D dizi oluşturma\n", 783 | "arr = np.array([1, 2, 3, 4, 5])\n", 784 | "\n", 785 | "# 3'ten büyük elemanlara erişim\n", 786 | "print(\"3'ten büyük elemanlar:\", arr[arr > 3]) # Çıktı: [4 5]" 787 | ] 788 | }, 789 | { 790 | "cell_type": "markdown", 791 | "metadata": {}, 792 | "source": [ 793 | "#### **2.1.1.4 Çok Boyutlu Dizilerde Erişim**\n", 794 | "\n", 795 | "Çok boyutlu dizilerde, her boyuta ait bir indeks veya dilimleme kullanılır." 796 | ] 797 | }, 798 | { 799 | "cell_type": "code", 800 | "execution_count": 24, 801 | "metadata": {}, 802 | "outputs": [ 803 | { 804 | "name": "stdout", 805 | "output_type": "stream", 806 | "text": [ 807 | "İkinci satırın üçüncü elemanı: 6\n", 808 | "İlk iki satırın tüm elemanları: [[1 2 3]\n", 809 | " [4 5 6]]\n" 810 | ] 811 | } 812 | ], 813 | "source": [ 814 | "import numpy as np\n", 815 | "\n", 816 | "# 2D dizi oluşturma\n", 817 | "arr = np.array([[1, 2, 3],\n", 818 | " [4, 5, 6],\n", 819 | " [7, 8, 9]])\n", 820 | "\n", 821 | "# İkinci satırın üçüncü elemanına erişim\n", 822 | "print(\"İkinci satırın üçüncü elemanı:\", arr[1, 2]) # Çıktı: 6\n", 823 | "\n", 824 | "# İlk iki satırın tüm elemanlarına erişim\n", 825 | "print(\"İlk iki satırın tüm elemanları:\", arr[:2, :]) # Çıktı: [[1 2 3]\n", 826 | " # [4 5 6]]" 827 | ] 828 | }, 829 | { 830 | "cell_type": "markdown", 831 | "metadata": {}, 832 | "source": [ 833 | "---\n", 834 | "\n", 835 | "### **2.1.2 Aritmetik İşlemler**\n", 836 | "\n", 837 | "Numpy dizileri, matematiksel işlemleri gerçekleştirmek için kullanılabilir. Bu işlemler, dizinin her elemanı üzerinde tek tek uygulanır veya iki dizinin karşılıklı elemanları arasında gerçekleştirilir. Numpy, bu işlemleri vektörize edilmiş hızlı işlemler olarak gerçekleştirir, bu da büyük veri setleri üzerinde verimliliği artırır.\n", 838 | "\n", 839 | "---\n", 840 | "\n", 841 | "#### **2.1.2.1 Temel Aritmetik İşlemler:**\n", 842 | "\n", 843 | "1. **Toplama**: İki dizinin karşılıklı elemanlarını toplar.\n", 844 | "2. **Çıkarma**: İki dizinin karşılıklı elemanlarını çıkarır.\n", 845 | "3. **Çarpma**: İki dizinin karşılıklı elemanlarını çarpar.\n", 846 | "4. **Bölme**: İki dizinin karşılıklı elemanlarını böler." 847 | ] 848 | }, 849 | { 850 | "cell_type": "code", 851 | "execution_count": 25, 852 | "metadata": {}, 853 | "outputs": [ 854 | { 855 | "name": "stdout", 856 | "output_type": "stream", 857 | "text": [ 858 | "Toplama: [5 7 9]\n", 859 | "Çıkarma: [-3 -3 -3]\n", 860 | "Çarpma: [ 4 10 18]\n", 861 | "Bölme: [0.25 0.4 0.5 ]\n" 862 | ] 863 | } 864 | ], 865 | "source": [ 866 | "import numpy as np\n", 867 | "\n", 868 | "# İki dizi oluşturma\n", 869 | "arr1 = np.array([1, 2, 3])\n", 870 | "arr2 = np.array([4, 5, 6])\n", 871 | "\n", 872 | "# Toplama\n", 873 | "result_addition = arr1 + arr2\n", 874 | "print(\"Toplama:\", result_addition) # Çıktı: [5 7 9]\n", 875 | "\n", 876 | "# Çıkarma\n", 877 | "result_subtraction = arr1 - arr2\n", 878 | "print(\"Çıkarma:\", result_subtraction) # Çıktı: [-3 -3 -3]\n", 879 | "\n", 880 | "# Çarpma\n", 881 | "result_multiplication = arr1 * arr2\n", 882 | "print(\"Çarpma:\", result_multiplication) # Çıktı: [ 4 10 18]\n", 883 | "\n", 884 | "# Bölme\n", 885 | "result_division = arr1 / arr2\n", 886 | "print(\"Bölme:\", result_division) # Çıktı: [0.25 0.4 0.5 ]" 887 | ] 888 | }, 889 | { 890 | "cell_type": "markdown", 891 | "metadata": {}, 892 | "source": [ 893 | "#### **2.1.2.2 Üstel ve Logaritmik İşlemler:**\n", 894 | "\n", 895 | "Numpy, diziler üzerinde üstel ve logaritmik işlemleri gerçekleştirmek için de fonksiyonlar sağlar.\n", 896 | "\n", 897 | "1. **Üs Alma**: `np.power()` fonksiyonu kullanılarak her elemanın bir üs alınır.\n", 898 | "\n", 899 | "2. **Logaritma**: `np.log()` ve `np.log10()` fonksiyonları kullanılarak logaritmalar hesaplanır.\n", 900 | "\n", 901 | "\n", 902 | "---" 903 | ] 904 | }, 905 | { 906 | "cell_type": "code", 907 | "execution_count": 26, 908 | "metadata": {}, 909 | "outputs": [ 910 | { 911 | "name": "stdout", 912 | "output_type": "stream", 913 | "text": [ 914 | "Üs alma (2^x): [1 4 9]\n", 915 | "Logaritma (doğal logaritma): [0. 0.69314718 1.09861229]\n", 916 | "Logaritma (10 tabanında): [0. 0.30103 0.47712125]\n" 917 | ] 918 | } 919 | ], 920 | "source": [ 921 | "import numpy as np\n", 922 | "\n", 923 | "# Dizi oluşturma\n", 924 | "arr = np.array([1, 2, 3])\n", 925 | "\n", 926 | "# Üs alma (2^x)\n", 927 | "result_power = np.power(arr, 2)\n", 928 | "print(\"Üs alma (2^x):\", result_power) # Çıktı: [1 4 9]\n", 929 | "\n", 930 | "# Logaritma (doğal logaritma)\n", 931 | "result_log = np.log(arr)\n", 932 | "print(\"Logaritma (doğal logaritma):\", result_log) # Çıktı: [0. 0.69314718 1.09861229]\n", 933 | "\n", 934 | "# Logaritma (10 tabanında)\n", 935 | "result_log10 = np.log10(arr)\n", 936 | "print(\"Logaritma (10 tabanında):\", result_log10) # Çıktı: [0. 0.30103 0.47712125]" 937 | ] 938 | }, 939 | { 940 | "cell_type": "markdown", 941 | "metadata": {}, 942 | "source": [ 943 | "#### **2.1.2.3 İleri Düzey İşlemler**\n", 944 | "\n", 945 | "Numpy, dizilerde yaygın olarak kullanılan diğer matematiksel fonksiyonları da destekler, örneğin trigonometrik, hiperbolik, ters trigonometrik ve diğer özel fonksiyonlar.\n", 946 | "\n", 947 | "---" 948 | ] 949 | }, 950 | { 951 | "cell_type": "code", 952 | "execution_count": 27, 953 | "metadata": {}, 954 | "outputs": [ 955 | { 956 | "name": "stdout", 957 | "output_type": "stream", 958 | "text": [ 959 | "Sinüs: [0.0000000e+00 1.0000000e+00 1.2246468e-16]\n", 960 | "Cosinüs: [ 1.000000e+00 6.123234e-17 -1.000000e+00]\n", 961 | "Tanjant: [ 0.00000000e+00 1.63312394e+16 -1.22464680e-16]\n" 962 | ] 963 | } 964 | ], 965 | "source": [ 966 | "import numpy as np\n", 967 | "\n", 968 | "# Dizi oluşturma\n", 969 | "arr = np.array([0, np.pi/2, np.pi])\n", 970 | "\n", 971 | "# Sinüs\n", 972 | "result_sin = np.sin(arr)\n", 973 | "print(\"Sinüs:\", result_sin) # Çıktı: [0.0000000e+00 1.0000000e+00 1.2246468e-16]\n", 974 | "\n", 975 | "# Cosinüs\n", 976 | "result_cos = np.cos(arr)\n", 977 | "print(\"Cosinüs:\", result_cos) # Çıktı: [ 1.000000e+00 6.123234e-17 -1.000000e+00]\n", 978 | "\n", 979 | "# Tanjant\n", 980 | "result_tan = np.tan(arr)\n", 981 | "print(\"Tanjant:\", result_tan) # Çıktı: [ 0.00000000e+00 1.63312394e+16 -1.22464680e-16]" 982 | ] 983 | }, 984 | { 985 | "cell_type": "markdown", 986 | "metadata": {}, 987 | "source": [ 988 | "\n", 989 | "---\n", 990 | "\n", 991 | "### **2.1.3 Rastgele Sayılar Üretme**\n", 992 | "\n", 993 | "Numpy, rastgele sayılar üretmek için `numpy.random` modülünü sağlar. Bu modül, farklı dağılımlara sahip rastgele sayılar üretmek için çeşitli fonksiyonlar içerir. Ayrıca, rastgele sayıların tekrar üretilebilir olmasını sağlamak için `seed()` fonksiyonu kullanılabilir." 994 | ] 995 | }, 996 | { 997 | "cell_type": "markdown", 998 | "metadata": {}, 999 | "source": [ 1000 | "\n", 1001 | "---\n", 1002 | "\n", 1003 | "#### **2.1.3.1 np.random.rand()**\n", 1004 | "\n", 1005 | "`np.random.rand()` fonksiyonu, 0 ile 1 arasında uniform (eşit olasılıklı) dağılıma sahip rastgele sayılar üretir.\n", 1006 | "\n" 1007 | ] 1008 | }, 1009 | { 1010 | "cell_type": "code", 1011 | "execution_count": 28, 1012 | "metadata": {}, 1013 | "outputs": [ 1014 | { 1015 | "name": "stdout", 1016 | "output_type": "stream", 1017 | "text": [ 1018 | "[0.80726368 0.1899492 0.98928982]\n" 1019 | ] 1020 | } 1021 | ], 1022 | "source": [ 1023 | "# 0 ile 1 arasında uniform dağılıma sahip 3 rastgele sayı üretme\n", 1024 | "random_numbers = np.random.rand(3)\n", 1025 | "print(random_numbers) # Örnek Çıktı: [0.891773 0.03942688 0.16983042]" 1026 | ] 1027 | }, 1028 | { 1029 | "cell_type": "markdown", 1030 | "metadata": {}, 1031 | "source": [ 1032 | "\n", 1033 | "---\n", 1034 | "#### **2.1.3.2 seed() Fonksiyonu**\n", 1035 | "\n", 1036 | "`np.random.seed()` fonksiyonu, rastgele sayı üretiminde kullanılan rastgele sayı üretecinin başlangıç durumunu belirler. Bu, aynı seed değeri kullanıldığında, aynı rastgele sayılar üretileceği anlamına gelir. Bu, rastgele sayılarla çalışırken tekrarlanabilirlik gerektiğinde yararlıdır." 1037 | ] 1038 | }, 1039 | { 1040 | "cell_type": "code", 1041 | "execution_count": 29, 1042 | "metadata": {}, 1043 | "outputs": [ 1044 | { 1045 | "name": "stdout", 1046 | "output_type": "stream", 1047 | "text": [ 1048 | "[0.37454012 0.95071431 0.73199394]\n", 1049 | "[0.69646919 0.28613933 0.22685145]\n" 1050 | ] 1051 | } 1052 | ], 1053 | "source": [ 1054 | "import numpy as np\n", 1055 | "\n", 1056 | "# seed() fonksiyonu kullanarak başlangıç durumunu belirleme\n", 1057 | "np.random.seed(42)\n", 1058 | "\n", 1059 | "# Aynı seed değeri kullanıldığında aynı rastgele sayılar üretilir\n", 1060 | "print(np.random.rand(3)) # Çıktı: [0.37454012 0.95071431 0.73199394]\n", 1061 | "\n", 1062 | "# Farklı bir seed değeri kullanıldığında farklı rastgele sayılar üretilir\n", 1063 | "np.random.seed(123)\n", 1064 | "print(np.random.rand(3)) # Çıktı: [0.69646919 0.28613933 0.22685145]" 1065 | ] 1066 | }, 1067 | { 1068 | "cell_type": "markdown", 1069 | "metadata": {}, 1070 | "source": [ 1071 | "\n", 1072 | "---\n", 1073 | "#### **2.1.3.3 np.random.randint()**\n", 1074 | "\n", 1075 | "`np.random.randint()` fonksiyonu, belirli bir aralıktan rastgele tam sayılar üretir." 1076 | ] 1077 | }, 1078 | { 1079 | "cell_type": "code", 1080 | "execution_count": 30, 1081 | "metadata": {}, 1082 | "outputs": [ 1083 | { 1084 | "name": "stdout", 1085 | "output_type": "stream", 1086 | "text": [ 1087 | "[ 7 2 4 10 7]\n" 1088 | ] 1089 | } 1090 | ], 1091 | "source": [ 1092 | "# 1 ile 10 arasında rastgele tam sayı üretme\n", 1093 | "random_integers = np.random.randint(1, 11, size=5)\n", 1094 | "print(random_integers) # Örnek Çıktı: [6 3 3 7 4]" 1095 | ] 1096 | }, 1097 | { 1098 | "cell_type": "markdown", 1099 | "metadata": {}, 1100 | "source": [ 1101 | "\n", 1102 | "---\n", 1103 | "#### **2.1.3.4 np.random.randn()**\n", 1104 | "\n", 1105 | "`np.random.randn()` fonksiyonu, standart normal dağılıma (ortalaması 0, standart sapması 1) sahip rastgele sayılar üretir." 1106 | ] 1107 | }, 1108 | { 1109 | "cell_type": "code", 1110 | "execution_count": 31, 1111 | "metadata": {}, 1112 | "outputs": [ 1113 | { 1114 | "name": "stdout", 1115 | "output_type": "stream", 1116 | "text": [ 1117 | "[ 1.59530112 -1.78309431 -0.28645147]\n" 1118 | ] 1119 | } 1120 | ], 1121 | "source": [ 1122 | "# Standart normal dağılıma sahip 3 rastgele sayı üretme\n", 1123 | "random_normal_numbers = np.random.randn(3)\n", 1124 | "print(random_normal_numbers) # Örnek Çıktı: [-0.987502 -0.55895427 0.77606027]" 1125 | ] 1126 | }, 1127 | { 1128 | "cell_type": "markdown", 1129 | "metadata": {}, 1130 | "source": [ 1131 | "\n", 1132 | "---\n", 1133 | "#### **2.1.3.5 np.random.choice()**\n", 1134 | "\n", 1135 | "`np.random.choice()` fonksiyonu, bir diziden rastgele örnekleme yapar." 1136 | ] 1137 | }, 1138 | { 1139 | "cell_type": "code", 1140 | "execution_count": 32, 1141 | "metadata": {}, 1142 | "outputs": [ 1143 | { 1144 | "name": "stdout", 1145 | "output_type": "stream", 1146 | "text": [ 1147 | "[5 3 2]\n" 1148 | ] 1149 | } 1150 | ], 1151 | "source": [ 1152 | "# Verilen bir diziden rastgele örnekleme yapma\n", 1153 | "arr = np.array([1, 2, 3, 4, 5])\n", 1154 | "random_sample = np.random.choice(arr, size=3, replace=False)\n", 1155 | "print(random_sample) # Örnek Çıktı: [4 2 5]" 1156 | ] 1157 | }, 1158 | { 1159 | "cell_type": "markdown", 1160 | "metadata": {}, 1161 | "source": [ 1162 | "## **2.2 Array Şekil Değiştirme**" 1163 | ] 1164 | }, 1165 | { 1166 | "cell_type": "markdown", 1167 | "metadata": {}, 1168 | "source": [ 1169 | "### **2.2.1 Dizinin Şeklini Değiştirme**" 1170 | ] 1171 | }, 1172 | { 1173 | "cell_type": "markdown", 1174 | "metadata": {}, 1175 | "source": [ 1176 | "\n", 1177 | "---\n", 1178 | "#### **2.2.1.1 `reshape()` Fonksiyonu**\n", 1179 | "\n", 1180 | "`reshape()` fonksiyonu, bir dizinin şeklini belirli bir şekilde değiştirmek için kullanılır. Yeni şekil, orijinal dizinin eleman sayısına uygun olmalıdır." 1181 | ] 1182 | }, 1183 | { 1184 | "cell_type": "code", 1185 | "execution_count": 33, 1186 | "metadata": {}, 1187 | "outputs": [ 1188 | { 1189 | "name": "stdout", 1190 | "output_type": "stream", 1191 | "text": [ 1192 | "1d Dizi: [1 2 3 4 5 6] \n", 1193 | "\n", 1194 | "2D Dizi:\n", 1195 | " [[1 2 3]\n", 1196 | " [4 5 6]]\n" 1197 | ] 1198 | } 1199 | ], 1200 | "source": [ 1201 | "import numpy as np\n", 1202 | "\n", 1203 | "# 1D diziyi 2x3 2D dizisine dönüştürme\n", 1204 | "arr1d = np.array([1, 2, 3, 4, 5, 6])\n", 1205 | "print(\"1d Dizi:\", arr1d, \"\\n\")\n", 1206 | "arr2d = arr1d.reshape(2, 3)\n", 1207 | "print(\"2D Dizi:\\n\", arr2d)" 1208 | ] 1209 | }, 1210 | { 1211 | "cell_type": "markdown", 1212 | "metadata": {}, 1213 | "source": [ 1214 | "\n", 1215 | "---\n", 1216 | "#### **2.2.1.2 `resize()` Fonksiyonu**\n", 1217 | "\n", 1218 | "`resize()` fonksiyonu, bir diziyi belirtilen şekilde değiştirir, ancak orijinal diziyi değiştirir." 1219 | ] 1220 | }, 1221 | { 1222 | "cell_type": "code", 1223 | "execution_count": 34, 1224 | "metadata": {}, 1225 | "outputs": [ 1226 | { 1227 | "name": "stdout", 1228 | "output_type": "stream", 1229 | "text": [ 1230 | "[1 2 3 4 5 6] \n", 1231 | "\n", 1232 | "Yeniden Boyutlandırılmış Dizi:\n", 1233 | " [[1 2 3]\n", 1234 | " [4 5 6]]\n" 1235 | ] 1236 | } 1237 | ], 1238 | "source": [ 1239 | "arr1d_ornek = np.array([1, 2, 3, 4, 5, 6])\n", 1240 | "print(arr1d_ornek, \"\\n\")\n", 1241 | "# Orijinal diziyi değiştirerek yeniden boyutlandırma\n", 1242 | "arr1d_ornek.resize(2, 3)\n", 1243 | "print(\"Yeniden Boyutlandırılmış Dizi:\\n\", arr1d_ornek)" 1244 | ] 1245 | }, 1246 | { 1247 | "cell_type": "markdown", 1248 | "metadata": {}, 1249 | "source": [ 1250 | "\n", 1251 | "---\n", 1252 | "#### **2.2.1.3 `reshape()` ve `-1` Kullanımı**\n", 1253 | "\n", 1254 | "`reshape()` fonksiyonunda bir boyut için `-1` kullanarak, o boyutun boyutunu otomatik olarak belirtebiliriz." 1255 | ] 1256 | }, 1257 | { 1258 | "cell_type": "code", 1259 | "execution_count": 35, 1260 | "metadata": {}, 1261 | "outputs": [ 1262 | { 1263 | "name": "stdout", 1264 | "output_type": "stream", 1265 | "text": [ 1266 | "[1 2 3 4 5 6] \n", 1267 | "\n", 1268 | "Otomatik Boyutlandırılmış Dizi:\n", 1269 | " [[1 2 3]\n", 1270 | " [4 5 6]]\n" 1271 | ] 1272 | } 1273 | ], 1274 | "source": [ 1275 | "print(arr1d, \"\\n\")\n", 1276 | "# Orijinal diziyi 2D dizisine dönüştürme, -1 ile otomatik boyut belirleme\n", 1277 | "arr2d_auto = arr1d.reshape(2, -1)\n", 1278 | "print(\"Otomatik Boyutlandırılmış Dizi:\\n\", arr2d_auto)" 1279 | ] 1280 | }, 1281 | { 1282 | "cell_type": "markdown", 1283 | "metadata": {}, 1284 | "source": [ 1285 | "\n", 1286 | "---\n", 1287 | "#### **2.2.1.4 Düzleştirme: flatten() Fonksiyonu**\n", 1288 | "\n", 1289 | "`flatten()` fonksiyonu, çok boyutlu bir diziyi düzleştirerek 1D diziye dönüştürür." 1290 | ] 1291 | }, 1292 | { 1293 | "cell_type": "code", 1294 | "execution_count": 36, 1295 | "metadata": {}, 1296 | "outputs": [ 1297 | { 1298 | "name": "stdout", 1299 | "output_type": "stream", 1300 | "text": [ 1301 | "[[1 2 3]\n", 1302 | " [4 5 6]] \n", 1303 | "\n", 1304 | "Düzleştirilmiş Dizi:\n", 1305 | " [1 2 3 4 5 6]\n" 1306 | ] 1307 | } 1308 | ], 1309 | "source": [ 1310 | "print(arr2d, \"\\n\")\n", 1311 | "# 2D diziyi düzleştirme\n", 1312 | "arr_flattened = arr2d.flatten()\n", 1313 | "print(\"Düzleştirilmiş Dizi:\\n\", arr_flattened)" 1314 | ] 1315 | }, 1316 | { 1317 | "cell_type": "markdown", 1318 | "metadata": {}, 1319 | "source": [ 1320 | "\n", 1321 | "---\n", 1322 | "#### **2.2.1.5 `ravel()` Fonksiyonu**\n", 1323 | "\n", 1324 | "`ravel()` fonksiyonu da düzleştirme işlemi yapar, ancak orijinal dizideki verilere bir referans sağlar." 1325 | ] 1326 | }, 1327 | { 1328 | "cell_type": "code", 1329 | "execution_count": 37, 1330 | "metadata": {}, 1331 | "outputs": [ 1332 | { 1333 | "name": "stdout", 1334 | "output_type": "stream", 1335 | "text": [ 1336 | "Düzleştirilmiş Dizi (ravel):\n", 1337 | " [1 2 3 4 5 6]\n" 1338 | ] 1339 | } 1340 | ], 1341 | "source": [ 1342 | "# 2D diziyi düzleştirme (ravel)\n", 1343 | "arr_raveled = arr2d.ravel()\n", 1344 | "print(\"Düzleştirilmiş Dizi (ravel):\\n\", arr_raveled)" 1345 | ] 1346 | }, 1347 | { 1348 | "cell_type": "markdown", 1349 | "metadata": {}, 1350 | "source": [ 1351 | "\n", 1352 | "---\n", 1353 | "### **2.2.2 Dizileri Birleştirme ve Ayırma**\n", 1354 | "\n", 1355 | "Numpy, dizileri birleştirme ve ayırma işlemleri için çeşitli yöntemler sunar. Bu yöntemler, dizileri birleştirmek için `concatenate()` ve `stack()` gibi fonksiyonları içerirken, ayırma işlemleri için `split()` fonksiyonu kullanılır." 1356 | ] 1357 | }, 1358 | { 1359 | "cell_type": "markdown", 1360 | "metadata": {}, 1361 | "source": [ 1362 | "\n", 1363 | "---\n", 1364 | "#### **2.2.2.1 `concatenate()` Fonksiyonu**\n", 1365 | "\n", 1366 | "`concatenate()` fonksiyonu, belirtilen eksen boyunca iki veya daha fazla diziyi birleştirir." 1367 | ] 1368 | }, 1369 | { 1370 | "cell_type": "code", 1371 | "execution_count": 38, 1372 | "metadata": {}, 1373 | "outputs": [ 1374 | { 1375 | "name": "stdout", 1376 | "output_type": "stream", 1377 | "text": [ 1378 | "Birleştirilmiş Dizi: [1 2 3 4 5 6]\n" 1379 | ] 1380 | } 1381 | ], 1382 | "source": [ 1383 | "import numpy as np\n", 1384 | "\n", 1385 | "# İki diziyi birleştirme\n", 1386 | "arr1 = np.array([1, 2, 3])\n", 1387 | "arr2 = np.array([4, 5, 6])\n", 1388 | "\n", 1389 | "result_concatenate = np.concatenate((arr1, arr2))\n", 1390 | "print(\"Birleştirilmiş Dizi:\", result_concatenate) # Çıktı: [1 2 3 4 5 6]" 1391 | ] 1392 | }, 1393 | { 1394 | "cell_type": "markdown", 1395 | "metadata": {}, 1396 | "source": [ 1397 | "\n", 1398 | "---\n", 1399 | "#### **2.2.2.2 `stack()` Fonksiyonu**\n", 1400 | "\n", 1401 | "`stack()` fonksiyonu, belirtilen eksen boyunca dizileri birleştirirken, yeni bir boyut ekler." 1402 | ] 1403 | }, 1404 | { 1405 | "cell_type": "code", 1406 | "execution_count": 39, 1407 | "metadata": {}, 1408 | "outputs": [ 1409 | { 1410 | "name": "stdout", 1411 | "output_type": "stream", 1412 | "text": [ 1413 | "Yığılmış Dizi:\n", 1414 | " [[1 2 3]\n", 1415 | " [4 5 6]]\n" 1416 | ] 1417 | } 1418 | ], 1419 | "source": [ 1420 | "# İki diziyi yığma (stacking)\n", 1421 | "result_stack = np.stack((arr1, arr2))\n", 1422 | "print(\"Yığılmış Dizi:\\n\", result_stack)" 1423 | ] 1424 | }, 1425 | { 1426 | "cell_type": "markdown", 1427 | "metadata": {}, 1428 | "source": [ 1429 | "\n", 1430 | "---\n", 1431 | "#### **2.2.2.3 `vstack()` ve `hstack()` Fonksiyonları**\n", 1432 | "\n", 1433 | "`vstack()` fonksiyonu, dikey olarak (satır bazında) dizileri birleştirirken, `hstack()` fonksiyonu, yatay olarak (sütun bazında) birleştirir." 1434 | ] 1435 | }, 1436 | { 1437 | "cell_type": "code", 1438 | "execution_count": 40, 1439 | "metadata": {}, 1440 | "outputs": [ 1441 | { 1442 | "name": "stdout", 1443 | "output_type": "stream", 1444 | "text": [ 1445 | "Dikey Birleştirilmiş Dizi:\n", 1446 | " [[1 2 3]\n", 1447 | " [4 5 6]]\n", 1448 | "Yatay Birleştirilmiş Dizi: [1 2 3 4 5 6]\n" 1449 | ] 1450 | } 1451 | ], 1452 | "source": [ 1453 | "# Dikey olarak dizileri birleştirme (vstack)\n", 1454 | "result_vstack = np.vstack((arr1, arr2))\n", 1455 | "print(\"Dikey Birleştirilmiş Dizi:\\n\", result_vstack)\n", 1456 | "\n", 1457 | "# Yatay olarak dizileri birleştirme (hstack)\n", 1458 | "result_hstack = np.hstack((arr1, arr2))\n", 1459 | "print(\"Yatay Birleştirilmiş Dizi:\", result_hstack)" 1460 | ] 1461 | }, 1462 | { 1463 | "cell_type": "markdown", 1464 | "metadata": {}, 1465 | "source": [ 1466 | "\n", 1467 | "---\n", 1468 | "#### **2.2.2.4 `split()` Fonksiyonu**\n", 1469 | "\n", 1470 | "`split()` fonksiyonu, belirtilen bir diziyi verilen bir pozisyonda ayırır." 1471 | ] 1472 | }, 1473 | { 1474 | "cell_type": "code", 1475 | "execution_count": 41, 1476 | "metadata": {}, 1477 | "outputs": [ 1478 | { 1479 | "name": "stdout", 1480 | "output_type": "stream", 1481 | "text": [ 1482 | "Ayrılmış Dizi: [array([1, 2]), array([3, 4]), array([5, 6])]\n" 1483 | ] 1484 | } 1485 | ], 1486 | "source": [ 1487 | "arr = np.array([1, 2, 3, 4, 5, 6])\n", 1488 | "result_split = np.split(arr, [2, 4])\n", 1489 | "print(\"Ayrılmış Dizi:\", result_split) # Çıktı: [array([1, 2]), array([3, 4]), array([5, 6])]" 1490 | ] 1491 | }, 1492 | { 1493 | "cell_type": "markdown", 1494 | "metadata": {}, 1495 | "source": [ 1496 | "\n", 1497 | "---\n", 1498 | "#### **2.2.2.5 `vsplit()` ve `hsplit()` Fonksiyonları**\n", 1499 | "\n", 1500 | "`vsplit()` fonksiyonu, dikey olarak (satır bazında), `hsplit()` fonksiyonu ise yatay olarak (sütun bazında) bir diziyi ayırır." 1501 | ] 1502 | }, 1503 | { 1504 | "cell_type": "code", 1505 | "execution_count": 42, 1506 | "metadata": {}, 1507 | "outputs": [ 1508 | { 1509 | "name": "stdout", 1510 | "output_type": "stream", 1511 | "text": [ 1512 | "Dikey Ayrılmış Dizi:\n", 1513 | " [array([[1, 2, 3]]), array([[4, 5, 6]])]\n", 1514 | "Yatay Ayrılmış Dizi: [array([[1],\n", 1515 | " [4]]), array([[2],\n", 1516 | " [5]]), array([[3],\n", 1517 | " [6]])]\n" 1518 | ] 1519 | } 1520 | ], 1521 | "source": [ 1522 | "# Dikey olarak diziyi ayırma (vsplit)\n", 1523 | "arr_2d = np.array([[1, 2, 3], [4, 5, 6]])\n", 1524 | "result_vsplit = np.vsplit(arr_2d, 2)\n", 1525 | "print(\"Dikey Ayrılmış Dizi:\\n\", result_vsplit)\n", 1526 | "\n", 1527 | "# Yatay olarak diziyi ayırma (hsplit)\n", 1528 | "result_hsplit = np.hsplit(arr_2d, 3)\n", 1529 | "print(\"Yatay Ayrılmış Dizi:\", result_hsplit)" 1530 | ] 1531 | }, 1532 | { 1533 | "cell_type": "markdown", 1534 | "metadata": {}, 1535 | "source": [ 1536 | "## **2.3 Veri Tipi Dönüşümleri**\n", 1537 | "\n", 1538 | "Numpy, farklı veri tipleri arasında dönüşümler yapmak için çeşitli fonksiyonlar sağlar. Bu dönüşümler, bir veri tipini başka bir veri tipine dönüştürmek için kullanılır." 1539 | ] 1540 | }, 1541 | { 1542 | "cell_type": "markdown", 1543 | "metadata": {}, 1544 | "source": [ 1545 | "### **2.3.1 `astype()` Fonksiyonu**\n", 1546 | "\n", 1547 | "`astype()` fonksiyonu, bir dizinin veri tipini belirtilen bir veri tipine dönüştürür." 1548 | ] 1549 | }, 1550 | { 1551 | "cell_type": "code", 1552 | "execution_count": 43, 1553 | "metadata": {}, 1554 | "outputs": [ 1555 | { 1556 | "name": "stdout", 1557 | "output_type": "stream", 1558 | "text": [ 1559 | "Dönüştürülmüş Dizi (integer):\n", 1560 | " [1 2 3 4]\n", 1561 | "Dönüştürülmüş Dizi (string):\n", 1562 | " ['1.1' '2.2' '3.3' '4.4']\n" 1563 | ] 1564 | } 1565 | ], 1566 | "source": [ 1567 | "import numpy as np\n", 1568 | "\n", 1569 | "# İlk olarak, bir float veri tipine sahip bir dizi oluşturalım\n", 1570 | "arr_float = np.array([1.1, 2.2, 3.3, 4.4])\n", 1571 | "\n", 1572 | "# Dizinin veri tipini integer olarak dönüştürelim\n", 1573 | "arr_int = arr_float.astype(int)\n", 1574 | "print(\"Dönüştürülmüş Dizi (integer):\\n\", arr_int)\n", 1575 | "\n", 1576 | "# Dizinin veri tipini string olarak dönüştürelim\n", 1577 | "arr_str = arr_float.astype(str)\n", 1578 | "print(\"Dönüştürülmüş Dizi (string):\\n\", arr_str)" 1579 | ] 1580 | }, 1581 | { 1582 | "cell_type": "markdown", 1583 | "metadata": {}, 1584 | "source": [ 1585 | "### **2.3.2 `asarray()` Fonksiyonu**\n", 1586 | "\n", 1587 | "`asarray()` fonksiyonu, bir nesneyi diziye dönüştürür. Bu fonksiyon, belirtilen bir veri tipini de kabul eder." 1588 | ] 1589 | }, 1590 | { 1591 | "cell_type": "code", 1592 | "execution_count": 44, 1593 | "metadata": {}, 1594 | "outputs": [ 1595 | { 1596 | "name": "stdout", 1597 | "output_type": "stream", 1598 | "text": [ 1599 | "Dönüştürülmüş Dizi:\n", 1600 | " [1. 2. 3. 4. 5.]\n" 1601 | ] 1602 | } 1603 | ], 1604 | "source": [ 1605 | "# Listeyi diziye dönüştürme ve veri tipini belirtme\n", 1606 | "arr_list = [1, 2, 3, 4, 5]\n", 1607 | "arr_array = np.asarray(arr_list, dtype=float)\n", 1608 | "print(\"Dönüştürülmüş Dizi:\\n\", arr_array)" 1609 | ] 1610 | }, 1611 | { 1612 | "cell_type": "markdown", 1613 | "metadata": {}, 1614 | "source": [ 1615 | "\n", 1616 | "---\n", 1617 | "\n", 1618 | "### **2.3.3 Veri Tipi Sınırlamaları ve İşlem Önerileri**\n", 1619 | "\n", 1620 | "Numpy'de veri tipleri, hesaplama sırasında önemli bir rol oynar. Farklı veri tipleri, bellek kullanımı, performans ve sonuçların doğruluğu açısından farklı avantajlar ve sınırlamalar sunar. Bu nedenle, veri tiplerini doğru bir şekilde seçmek önemlidir.\n", 1621 | "\n", 1622 | "#### **Veri Tipi Sınırlamaları**\n", 1623 | "\n", 1624 | "Numpy'de yaygın olarak kullanılan bazı veri tipleri şunlardır:\n", 1625 | "\n", 1626 | "- `int8`, `int16`, `int32`, `int64`: İşaretli tam sayılar.\n", 1627 | "- `uint8`, `uint16`, `uint32`, `uint64`: İşaretsiz tam sayılar.\n", 1628 | "- `float16`, `float32`, `float64`, `float128`: Ondalıklı sayılar.\n", 1629 | "- `bool`: Mantıksal (boolean) değerler.\n", 1630 | "- `complex64`, `complex128`, `complex256`: Karmaşık sayılar.\n", 1631 | "\n", 1632 | "Her veri tipinin sınırlamaları vardır. Örneğin, daha küçük bir veri tipi daha az bellek kullanırken, daha büyük bir veri tipi daha büyük değerleri temsil edebilir ancak daha fazla bellek kullanır. Ayrıca, veri tipleri arasında dönüşüm yaparken, veri kaybına yol açabilirsiniz.\n", 1633 | "\n", 1634 | "#### **İşlem Önerileri**\n", 1635 | "\n", 1636 | "1. **Veri Tipi Seçimi**: Veri tipi seçerken, kullanılacak değerlerin aralığını ve hassasiyetini göz önünde bulundurmak önemlidir. Örneğin, integer yerine float veri tipini tercih etmek, daha geniş bir aralığı ve hassasiyeti sağlar, ancak daha fazla bellek kullanır.\n", 1637 | "\n", 1638 | "2. **İşlem Hızı ve Bellek Kullanımı**: Büyük veri kümeleriyle çalışırken, veri tipi seçiminin işlem hızı ve bellek kullanımı üzerinde büyük bir etkisi olabilir. Daha küçük veri tipleri daha az bellek kullanırken, işlemler daha hızlı olabilir. Ancak, veri kaybı riski daha yüksektir.\n", 1639 | "\n", 1640 | "3. **Veri Dönüşümleri**: İşlem sırasında, veri tipleri arasında dönüşümler yapılabilir. Ancak, bu dönüşümler veri kaybına yol açabilir. Bu nedenle, mümkünse, işlem yapmadan önce veri tiplerini dikkatlice seçmek önemlidir.\n", 1641 | "\n", 1642 | "#### Örnekler\n", 1643 | "\n", 1644 | "```python\n", 1645 | "import numpy as np\n", 1646 | "\n", 1647 | "# Veri tiplerinin sınırlamaları\n", 1648 | "print(\"int16 Sınırları:\", np.iinfo(np.int16))\n", 1649 | "print(\"float32 Sınırları:\", np.finfo(np.float32))\n", 1650 | "\n", 1651 | "# Veri tipi dönüşümleri ve işlem önerileri\n", 1652 | "arr_float32 = np.array([1.5, 2.5, 3.5], dtype=np.float32)\n", 1653 | "arr_int32 = arr_float32.astype(np.int32)\n", 1654 | "print(\"Dönüştürülmüş Dizi (int32):\\n\", arr_int32)\n", 1655 | "```\n", 1656 | "\n", 1657 | "Bu örnekte, `np.iinfo()` ve `np.finfo()` fonksiyonları ile farklı veri tiplerinin sınırları gösterilmiş ve `astype()` fonksiyonu ile veri tipi dönüşümü yapılmıştır. Bu, veri tipi seçimi ve dönüşümleri konusunda dikkatli olmanın önemini vurgular.\n", 1658 | "\n", 1659 | "---" 1660 | ] 1661 | }, 1662 | { 1663 | "cell_type": "markdown", 1664 | "metadata": {}, 1665 | "source": [ 1666 | "\n", 1667 | "---\n", 1668 | "\n", 1669 | "## **2.4 Fancy Indexing**\n", 1670 | "\n", 1671 | "Fancy indexing, Numpy dizilerini dilimlemek veya dizinin belirli elemanlarına erişmek için dizileri kullanma yöntemidir. Bu yöntemde, bir dizi veya liste kullanılarak dizinin belirli elemanlarına erişilir. Fancy indexing, basit indeksleme ve dilimleme yöntemlerine ek olarak daha esnek ve güçlü bir seçenektir." 1672 | ] 1673 | }, 1674 | { 1675 | "cell_type": "markdown", 1676 | "metadata": {}, 1677 | "source": [ 1678 | "### **2.4.1 Tek Boyutlu Fancy Indexing**\n", 1679 | "\n", 1680 | "Tek boyutlu dizilerde, fancy indexing bir dizi veya liste kullanarak belirli elemanlara erişmek için kullanılır." 1681 | ] 1682 | }, 1683 | { 1684 | "cell_type": "code", 1685 | "execution_count": 45, 1686 | "metadata": {}, 1687 | "outputs": [ 1688 | { 1689 | "name": "stdout", 1690 | "output_type": "stream", 1691 | "text": [ 1692 | "Fancy Indexing Sonucu: [10 30 50]\n" 1693 | ] 1694 | } 1695 | ], 1696 | "source": [ 1697 | "import numpy as np\n", 1698 | "\n", 1699 | "arr = np.array([10, 20, 30, 40, 50])\n", 1700 | "\n", 1701 | "# Fancy indexing kullanarak belirli elemanlara erişme\n", 1702 | "indices = [0, 2, 4]\n", 1703 | "result = arr[indices]\n", 1704 | "print(\"Fancy Indexing Sonucu:\", result) # Çıktı: [10 30 50]" 1705 | ] 1706 | }, 1707 | { 1708 | "cell_type": "markdown", 1709 | "metadata": {}, 1710 | "source": [ 1711 | "### **2.4.2 İki Boyutlu Fancy Indexing**\n", 1712 | "\n", 1713 | "İki boyutlu dizilerde, fancy indexing her boyut için ayrı bir dizi veya liste kullanılarak belirli elemanlara erişmek için kullanılır." 1714 | ] 1715 | }, 1716 | { 1717 | "cell_type": "code", 1718 | "execution_count": 46, 1719 | "metadata": {}, 1720 | "outputs": [ 1721 | { 1722 | "name": "stdout", 1723 | "output_type": "stream", 1724 | "text": [ 1725 | "Fancy Indexing İle Seçilmiş Dizi:\n", 1726 | " [[1 3]\n", 1727 | " [7 9]]\n" 1728 | ] 1729 | } 1730 | ], 1731 | "source": [ 1732 | "# İki boyutlu dizide fancy indexing kullanma\n", 1733 | "arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])\n", 1734 | "\n", 1735 | "# Belirli satır ve sütunları seçme\n", 1736 | "row_indices = [0, 2]\n", 1737 | "col_indices = [0, 2]\n", 1738 | "result_2d = arr_2d[row_indices][:, col_indices]\n", 1739 | "print(\"Fancy Indexing İle Seçilmiş Dizi:\\n\", result_2d)" 1740 | ] 1741 | }, 1742 | { 1743 | "cell_type": "markdown", 1744 | "metadata": {}, 1745 | "source": [ 1746 | "### **2.4.3 Maskelerle Indexleme**\n", 1747 | "\n", 1748 | "Maskelerle indexleme, bir koşula bağlı olarak dizinin belirli elemanlarına erişmek için kullanılır. Bu, koşula uyan veya uymayan elemanlara erişmek için kullanışlı bir yöntemdir." 1749 | ] 1750 | }, 1751 | { 1752 | "cell_type": "markdown", 1753 | "metadata": {}, 1754 | "source": [ 1755 | "#### **2.4.3.1 Boolean Maskelerle Indexleme**\n", 1756 | "\n", 1757 | "Boolean maskeler, bir koşula bağlı olarak dizinin elemanlarını seçmek için kullanılır." 1758 | ] 1759 | }, 1760 | { 1761 | "cell_type": "code", 1762 | "execution_count": 47, 1763 | "metadata": {}, 1764 | "outputs": [ 1765 | { 1766 | "name": "stdout", 1767 | "output_type": "stream", 1768 | "text": [ 1769 | "Maskelenmiş Dizi: [3 4 5]\n" 1770 | ] 1771 | } 1772 | ], 1773 | "source": [ 1774 | "# Boolean maskelerle indexleme\n", 1775 | "arr = np.array([1, 2, 3, 4, 5])\n", 1776 | "\n", 1777 | "mask = arr > 2\n", 1778 | "result_masked = arr[mask]\n", 1779 | "print(\"Maskelenmiş Dizi:\", result_masked) # Çıktı: [3 4 5]" 1780 | ] 1781 | }, 1782 | { 1783 | "cell_type": "markdown", 1784 | "metadata": {}, 1785 | "source": [ 1786 | "#### **2.4.3.2 Koşul İfadeleri ile Indexleme**\n", 1787 | "\n", 1788 | "Koşul ifadeleri, belirli bir koşula uyan dizinin elemanlarına erişmek için kullanılır." 1789 | ] 1790 | }, 1791 | { 1792 | "cell_type": "code", 1793 | "execution_count": 48, 1794 | "metadata": {}, 1795 | "outputs": [ 1796 | { 1797 | "name": "stdout", 1798 | "output_type": "stream", 1799 | "text": [ 1800 | "Koşula Uyan Elemanlar: [3 4 5]\n" 1801 | ] 1802 | } 1803 | ], 1804 | "source": [ 1805 | "# Koşul ifadeleri ile indexleme\n", 1806 | "arr = np.array([1, 2, 3, 4, 5])\n", 1807 | "\n", 1808 | "result_condition = arr[arr > 2]\n", 1809 | "print(\"Koşula Uyan Elemanlar:\", result_condition) # Çıktı: [3 4 5]" 1810 | ] 1811 | }, 1812 | { 1813 | "cell_type": "markdown", 1814 | "metadata": {}, 1815 | "source": [ 1816 | "## **2.5 Array Operasyonları**" 1817 | ] 1818 | }, 1819 | { 1820 | "cell_type": "markdown", 1821 | "metadata": {}, 1822 | "source": [ 1823 | "### **2.5.1 Broadcasting (Yayılma)**\n", 1824 | "\n", 1825 | "Numpy'nin yayılma (broadcasting) kavramı, farklı şekillere sahip diziler arasında element-wise işlemleri gerçekleştirmek için kullanılan bir özelliktir. Bu özellik, boyutları uygun hale getirerek, daha az boyuta sahip bir dizi ile daha büyük bir dizi arasındaki işlemleri gerçekleştirmeyi mümkün kılar.\n", 1826 | "\n", 1827 | "Yayılma, Numpy'deki vektörize edilmiş işlemleri yaparken çok yaygın olarak kullanılır. Bir dizi ile skaler değerler arasında veya iki farklı şekle sahip diziler arasında işlem yapmak istendiğinde yayılma devreye girer. Bu durumda, Numpy, uygun boyutları otomatik olarak eşleştirir ve işlemi gerçekleştirir.\n", 1828 | "\n", 1829 | "Örneğin, iki farklı boyuta sahip diziler arasında toplama işlemi yapmak istendiğinde, küçük boyuttaki dizi, büyük boyuttaki diziye yayılabilir ve işlem gerçekleştirilebilir.\n", 1830 | "\n", 1831 | "Yayılmanın kullanımı, kodun daha temiz ve daha az karmaşık olmasını sağlar. Ayrıca, Python'un yaygın işlemlerini vektörize etmek için yaygın olarak kullanılır, bu da işlemlerin daha hızlı ve daha verimli olmasını sağlar.\n", 1832 | "\n", 1833 | "Özetlemek gerekirse, Numpy'nin yayılma kavramı, farklı boyutlara sahip diziler arasında işlemleri kolaylaştıran ve vektörize etmeye olanak tanıyan bir özelliktir." 1834 | ] 1835 | }, 1836 | { 1837 | "cell_type": "markdown", 1838 | "metadata": {}, 1839 | "source": [ 1840 | "\n", 1841 | "---\n", 1842 | "\n", 1843 | "#### **2.5.1.1 Broadcasting Kuralları**\n", 1844 | "\n", 1845 | "Numpy'de, broadcasting işlemlerinin gerçekleştirilmesi için belirli kurallar vardır. Bu kurallar, farklı şekillere sahip diziler arasında yayılma işlemlerini tanımlar ve uygun boyutları eşleştirmek için gereken adımları belirler.\n", 1846 | "\n", 1847 | "##### **1. Boyut Uyumluluğu**\n", 1848 | "\n", 1849 | "Broadcasting işlemleri yaparken, dizilerin boyutları karşılaştırılır. Her boyutta, iki dizi ya aynı boyuta sahip olmalıdır ya da biri boyutsuz olmalıdır. Eğer boyutlardan biri 1 ise, bu boyut, diğer diziye uyumlu hale getirilebilir." 1850 | ] 1851 | }, 1852 | { 1853 | "cell_type": "code", 1854 | "execution_count": 49, 1855 | "metadata": {}, 1856 | "outputs": [ 1857 | { 1858 | "name": "stdout", 1859 | "output_type": "stream", 1860 | "text": [ 1861 | "Broadcasting Sonucu:\n", 1862 | " [[2. 3. 4.]\n", 1863 | " [2. 3. 4.]\n", 1864 | " [2. 3. 4.]]\n" 1865 | ] 1866 | } 1867 | ], 1868 | "source": [ 1869 | "import numpy as np\n", 1870 | "\n", 1871 | "# 3x3 boyutunda bir dizi\n", 1872 | "arr1 = np.ones((3, 3))\n", 1873 | "\n", 1874 | "# 1 boyutunda bir dizi\n", 1875 | "arr2 = np.array([1, 2, 3])\n", 1876 | "\n", 1877 | "# Broadcasting ile işlem\n", 1878 | "result = arr1 + arr2\n", 1879 | "print(\"Broadcasting Sonucu:\\n\", result)" 1880 | ] 1881 | }, 1882 | { 1883 | "cell_type": "markdown", 1884 | "metadata": {}, 1885 | "source": [ 1886 | "\n", 1887 | "---\n", 1888 | "##### **2. Boyut Uyumsuzluğunda Hata**\n", 1889 | "\n", 1890 | "Eğer broadcasting işlemi için uygun boyut eşleşmeleri sağlanamıyorsa, Numpy hata verecektir. Bu durumda, dizilerin boyutlarını uyumlu hale getirmek veya işlemi gerçekleştirmek için başka bir yöntem kullanmak gerekir.\n", 1891 | "\n", 1892 | "---" 1893 | ] 1894 | }, 1895 | { 1896 | "cell_type": "code", 1897 | "execution_count": 50, 1898 | "metadata": {}, 1899 | "outputs": [ 1900 | { 1901 | "ename": "ValueError", 1902 | "evalue": "operands could not be broadcast together with shapes (3,3) (2,) ", 1903 | "output_type": "error", 1904 | "traceback": [ 1905 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", 1906 | "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", 1907 | "Cell \u001b[1;32mIn[50], line 10\u001b[0m\n\u001b[0;32m 7\u001b[0m arr2 \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39marray([\u001b[38;5;241m1\u001b[39m, \u001b[38;5;241m2\u001b[39m])\n\u001b[0;32m 9\u001b[0m \u001b[38;5;66;03m# Broadcasting ile işlem (Hata alınır)\u001b[39;00m\n\u001b[1;32m---> 10\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43marr1\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[43m \u001b[49m\u001b[43marr2\u001b[49m\n", 1908 | "\u001b[1;31mValueError\u001b[0m: operands could not be broadcast together with shapes (3,3) (2,) " 1909 | ] 1910 | } 1911 | ], 1912 | "source": [ 1913 | "import numpy as np\n", 1914 | "\n", 1915 | "# 3x3 boyutunda bir dizi\n", 1916 | "arr1 = np.ones((3, 3))\n", 1917 | "\n", 1918 | "# 2 boyutunda bir dizi\n", 1919 | "arr2 = np.array([1, 2])\n", 1920 | "\n", 1921 | "# Broadcasting ile işlem (Hata alınır)\n", 1922 | "result = arr1 + arr2" 1923 | ] 1924 | }, 1925 | { 1926 | "cell_type": "markdown", 1927 | "metadata": {}, 1928 | "source": [ 1929 | "\n", 1930 | "---\n", 1931 | "##### **3. Boyut Ekleme**\n", 1932 | "\n", 1933 | "Broadcasting işlemi sırasında, boyut ekleme adımı gerçekleştirilir. Diziler arasındaki boyut farkı, eksik olan boyutlara 1 eklenerek tamamlanır.\n", 1934 | "\n", 1935 | "---" 1936 | ] 1937 | }, 1938 | { 1939 | "cell_type": "code", 1940 | "execution_count": null, 1941 | "metadata": {}, 1942 | "outputs": [], 1943 | "source": [ 1944 | "import numpy as np\n", 1945 | "\n", 1946 | "# 3x3 boyutunda bir dizi\n", 1947 | "arr1 = np.ones((3, 3))\n", 1948 | "\n", 1949 | "# 3 boyutunda bir dizi\n", 1950 | "arr2 = np.array([1, 2, 3])\n", 1951 | "\n", 1952 | "# Broadcasting ile işlem\n", 1953 | "result = arr1 + arr2[:, np.newaxis]\n", 1954 | "print(\"Broadcasting Sonucu:\\n\", result)" 1955 | ] 1956 | }, 1957 | { 1958 | "cell_type": "markdown", 1959 | "metadata": {}, 1960 | "source": [ 1961 | "\n", 1962 | "---\n", 1963 | "#### **2.5.1.2 Örneklerle Yayılma Kullanımı**\n", 1964 | "\n", 1965 | "Numpy'de yayılma (broadcasting) özelliği, farklı şekillere sahip diziler arasında element-wise işlemleri gerçekleştirmek için kullanılır. Bu özellik, boyutları uygun hale getirerek, daha az boyuta sahip bir dizi ile daha büyük bir dizi arasındaki işlemleri gerçekleştirmeyi mümkün kılar. İşte farklı yöntemlerle kullanılan yayılma örnekleri:" 1966 | ] 1967 | }, 1968 | { 1969 | "cell_type": "markdown", 1970 | "metadata": {}, 1971 | "source": [ 1972 | "\n", 1973 | "---\n", 1974 | "##### **1. Temel Yayılma**\n", 1975 | "\n", 1976 | "Temel yayılma, iki dizinin boyutları aynı veya biri boyutsuzsa gerçekleşir. Bu durumda, element-wise işlem doğrudan uygulanabilir.\n", 1977 | "\n", 1978 | "---" 1979 | ] 1980 | }, 1981 | { 1982 | "cell_type": "code", 1983 | "execution_count": null, 1984 | "metadata": {}, 1985 | "outputs": [], 1986 | "source": [ 1987 | "import numpy as np\n", 1988 | "\n", 1989 | "arr1 = np.array([[1, 2, 3], [4, 5, 6]])\n", 1990 | "arr2 = np.array([10, 20, 30])\n", 1991 | "\n", 1992 | "# Temel yayılma ile işlem\n", 1993 | "result = arr1 + arr2\n", 1994 | "print(\"Temel Yayılma Sonucu:\\n\", result)" 1995 | ] 1996 | }, 1997 | { 1998 | "cell_type": "markdown", 1999 | "metadata": {}, 2000 | "source": [ 2001 | "\n", 2002 | "---\n", 2003 | "##### **2. Boyut Ekleme ile Yayılma**\n", 2004 | "\n", 2005 | "Boyut ekleme ile yayılma, boyutları uyumlu hale getirerek işlem yapılmasını sağlar. Bu durumda, boyutları farklı olan diziler arasında yayılma işlemi gerçekleştirilebilir.\n", 2006 | "\n", 2007 | "---" 2008 | ] 2009 | }, 2010 | { 2011 | "cell_type": "code", 2012 | "execution_count": null, 2013 | "metadata": {}, 2014 | "outputs": [], 2015 | "source": [ 2016 | "# Boyut ekleme ile yayılma\n", 2017 | "arr1 = np.array([[1, 2, 3], [4, 5, 6]])\n", 2018 | "arr2 = np.array([10, 20, 30])\n", 2019 | "\n", 2020 | "# Boyut ekleme ile işlem\n", 2021 | "result = arr1 + arr2[:, np.newaxis]\n", 2022 | "print(\"Boyut Ekleme ile Yayılma Sonucu:\\n\", result)" 2023 | ] 2024 | }, 2025 | { 2026 | "cell_type": "markdown", 2027 | "metadata": {}, 2028 | "source": [ 2029 | "\n", 2030 | "---\n", 2031 | "##### **3. Broadcasting Kuralı ile Yayılma**\n", 2032 | "\n", 2033 | "Broadcasting kuralı, dizilerin uyumlu hale getirilmesi için gereken boyut eşleşmelerini belirler. Bu kuralı kullanarak, farklı boyutlara sahip diziler arasında yayılma işlemi gerçekleştirilebilir.\n", 2034 | "\n", 2035 | "---" 2036 | ] 2037 | }, 2038 | { 2039 | "cell_type": "code", 2040 | "execution_count": null, 2041 | "metadata": {}, 2042 | "outputs": [], 2043 | "source": [ 2044 | "# Broadcasting kuralı ile yayılma\n", 2045 | "arr1 = np.array([[1, 2, 3], [4, 5, 6]])\n", 2046 | "arr2 = np.array([1, 2])\n", 2047 | "\n", 2048 | "# Broadcasting kuralı ile işlem\n", 2049 | "result = arr1 + arr2[:, np.newaxis]\n", 2050 | "print(\"Broadcasting Kuralı ile Yayılma Sonucu:\\n\", result)" 2051 | ] 2052 | }, 2053 | { 2054 | "cell_type": "markdown", 2055 | "metadata": {}, 2056 | "source": [ 2057 | "\n", 2058 | "---\n", 2059 | "### **2.5.2 Dizi Yineleme (Repeating)**\n", 2060 | "\n", 2061 | "Numpy'de dizi yineleme, bir diziyi belirli bir eksen boyunca tekrarlayarak yeni bir dizi oluşturmayı sağlayan bir işlemdir. Bu işlem, dizinin belirli boyutlarındaki tekrarlarını oluşturur. Numpy'nin `repeat()` fonksiyonu veya `tile()` fonksiyonu ile gerçekleştirilir.\n", 2062 | "\n", 2063 | "---" 2064 | ] 2065 | }, 2066 | { 2067 | "cell_type": "markdown", 2068 | "metadata": {}, 2069 | "source": [ 2070 | "\n", 2071 | "---\n", 2072 | "#### **1. `repeat()` Fonksiyonu ile Yineleme**\n", 2073 | "\n", 2074 | "Numpy'de `repeat()` fonksiyonu, bir diziyi belirli sayıda tekrarlayarak yeni bir dizi oluşturur. Bu fonksiyon, belirtilen eksen boyunca tekrar sayısını ve tekrar edilecek diziyi alır.\n", 2075 | "\n", 2076 | "---" 2077 | ] 2078 | }, 2079 | { 2080 | "cell_type": "code", 2081 | "execution_count": null, 2082 | "metadata": {}, 2083 | "outputs": [ 2084 | { 2085 | "name": "stdout", 2086 | "output_type": "stream", 2087 | "text": [ 2088 | "repeat() Fonksiyonu ile Yineleme Sonucu: [1 1 1 2 2 2 3 3 3]\n" 2089 | ] 2090 | } 2091 | ], 2092 | "source": [ 2093 | "import numpy as np\n", 2094 | "\n", 2095 | "# Bir dizi oluşturalım\n", 2096 | "arr = np.array([1, 2, 3])\n", 2097 | "\n", 2098 | "# Diziyi tekrarlayalım\n", 2099 | "result = np.repeat(arr, 3) # Her elemanı 3 kez tekrarla\n", 2100 | "print(\"repeat() Fonksiyonu ile Yineleme Sonucu:\", result) # Çıktı: [1 1 1 2 2 2 3 3 3]" 2101 | ] 2102 | }, 2103 | { 2104 | "cell_type": "markdown", 2105 | "metadata": {}, 2106 | "source": [ 2107 | "\n", 2108 | "---\n", 2109 | "#### **2. `tile()` Fonksiyonu ile Yineleme**\n", 2110 | "\n", 2111 | "`tile()` fonksiyonu, bir dizinin belirli bir şekilde yinelemesini sağlar. Bu fonksiyon, belirtilen şekil boyunca diziyi kopyalar ve yeni bir dizi oluşturur.\n", 2112 | "\n", 2113 | "---" 2114 | ] 2115 | }, 2116 | { 2117 | "cell_type": "code", 2118 | "execution_count": null, 2119 | "metadata": {}, 2120 | "outputs": [ 2121 | { 2122 | "name": "stdout", 2123 | "output_type": "stream", 2124 | "text": [ 2125 | "tile() Fonksiyonu ile Yineleme Sonucu: [1 2 3 1 2 3 1 2 3]\n" 2126 | ] 2127 | } 2128 | ], 2129 | "source": [ 2130 | "# Diziyi belirli bir şekilde yineleyelim\n", 2131 | "result_tile = np.tile(arr, 3) # Diziyi 3 kez yatayda yinele\n", 2132 | "print(\"tile() Fonksiyonu ile Yineleme Sonucu:\", result_tile) # Çıktı: [1 2 3 1 2 3 1 2 3]" 2133 | ] 2134 | }, 2135 | { 2136 | "cell_type": "markdown", 2137 | "metadata": {}, 2138 | "source": [ 2139 | "\n", 2140 | "---\n", 2141 | "### **2.5.3 İç Çarpım (Dot Product)**\n", 2142 | "\n", 2143 | "Numpy'de iç çarpım (dot product), iki vektör arasında veya bir matris ile bir vektör veya iki matris arasında yapılan matematiksel bir işlemdir. İç çarpım, vektörlerin veya matrislerin elemanlarının çarpılması ve toplanmasıyla hesaplanır." 2144 | ] 2145 | }, 2146 | { 2147 | "cell_type": "markdown", 2148 | "metadata": {}, 2149 | "source": [ 2150 | "\n", 2151 | "---\n", 2152 | "#### **1. İki Vektör Arasındaki İç Çarpım**\n", 2153 | "\n", 2154 | "İki vektör arasındaki iç çarpım, vektörlerin elemanları arasında yapılan çarpma işlemlerinin toplanmasıyla hesaplanır.\n", 2155 | "\n", 2156 | "---" 2157 | ] 2158 | }, 2159 | { 2160 | "cell_type": "code", 2161 | "execution_count": null, 2162 | "metadata": {}, 2163 | "outputs": [ 2164 | { 2165 | "name": "stdout", 2166 | "output_type": "stream", 2167 | "text": [ 2168 | "İki Vektör Arasındaki İç Çarpım: 32\n" 2169 | ] 2170 | } 2171 | ], 2172 | "source": [ 2173 | "import numpy as np\n", 2174 | "\n", 2175 | "# İki vektör oluşturalım\n", 2176 | "vec1 = np.array([1, 2, 3])\n", 2177 | "vec2 = np.array([4, 5, 6])\n", 2178 | "\n", 2179 | "# İki vektör arasındaki iç çarpımı hesaplayalım\n", 2180 | "dot_product = np.dot(vec1, vec2)\n", 2181 | "print(\"İki Vektör Arasındaki İç Çarpım:\", dot_product) # Çıktı: 32" 2182 | ] 2183 | }, 2184 | { 2185 | "cell_type": "markdown", 2186 | "metadata": {}, 2187 | "source": [ 2188 | "\n", 2189 | "---\n", 2190 | "#### **2. Matris ve Vektör Arasındaki İç Çarpım**\n", 2191 | "\n", 2192 | "Bir matris ile bir vektör arasındaki iç çarpım, matrisin satırlarıyla vektörün sütunlarının elemanları arasında yapılan çarpma işlemlerinin toplanmasıyla hesaplanır.\n", 2193 | "\n", 2194 | "---" 2195 | ] 2196 | }, 2197 | { 2198 | "cell_type": "code", 2199 | "execution_count": null, 2200 | "metadata": {}, 2201 | "outputs": [ 2202 | { 2203 | "name": "stdout", 2204 | "output_type": "stream", 2205 | "text": [ 2206 | "Matris ve Vektör Arasındaki İç Çarpım: [ 8 18 28]\n" 2207 | ] 2208 | } 2209 | ], 2210 | "source": [ 2211 | "# Bir matris ve bir vektör oluşturalım\n", 2212 | "matrix = np.array([[1, 2], [3, 4], [5, 6]])\n", 2213 | "vector = np.array([2, 3])\n", 2214 | "\n", 2215 | "# Matris ve vektör arasındaki iç çarpımı hesaplayalım\n", 2216 | "dot_product_matrix_vector = np.dot(matrix, vector)\n", 2217 | "print(\"Matris ve Vektör Arasındaki İç Çarpım:\", dot_product_matrix_vector) # Çıktı: [ 8 18 28]" 2218 | ] 2219 | }, 2220 | { 2221 | "cell_type": "markdown", 2222 | "metadata": {}, 2223 | "source": [ 2224 | "\n", 2225 | "---\n", 2226 | "#### **3. İki Matris Arasındaki İç Çarpım**\n", 2227 | "\n", 2228 | "İki matris arasındaki iç çarpım, matrislerin satırlarıyla sütunlarının elemanları arasında yapılan çarpma işlemlerinin toplanmasıyla hesaplanır.\n", 2229 | "\n", 2230 | "---" 2231 | ] 2232 | }, 2233 | { 2234 | "cell_type": "code", 2235 | "execution_count": null, 2236 | "metadata": {}, 2237 | "outputs": [ 2238 | { 2239 | "name": "stdout", 2240 | "output_type": "stream", 2241 | "text": [ 2242 | "İki Matris Arasındaki İç Çarpım:\n", 2243 | " [[19 22]\n", 2244 | " [43 50]]\n" 2245 | ] 2246 | } 2247 | ], 2248 | "source": [ 2249 | "# İki matris oluşturalım\n", 2250 | "matrix1 = np.array([[1, 2], [3, 4]])\n", 2251 | "matrix2 = np.array([[5, 6], [7, 8]])\n", 2252 | "\n", 2253 | "# İki matris arasındaki iç çarpımı hesaplayalım\n", 2254 | "dot_product_matrices = np.dot(matrix1, matrix2)\n", 2255 | "print(\"İki Matris Arasındaki İç Çarpım:\\n\", dot_product_matrices)" 2256 | ] 2257 | }, 2258 | { 2259 | "cell_type": "markdown", 2260 | "metadata": {}, 2261 | "source": [ 2262 | "\n", 2263 | "---\n", 2264 | "## **2.5.4 İşlem Fonksiyonları (np.sum(), np.prod(), np.mean() vs.)**\n", 2265 | "\n", 2266 | "Numpy'de, çeşitli işlem fonksiyonları mevcuttur. Bu fonksiyonlar, dizilerdeki elemanların toplamını, çarpımını, ortalama değerini ve diğer istatistiksel hesaplamaları gerçekleştirmek için kullanılır. En yaygın kullanılan işlem fonksiyonları arasında `np.sum()`, `np.prod()`, `np.mean()` ve benzerleri bulunur." 2267 | ] 2268 | }, 2269 | { 2270 | "cell_type": "markdown", 2271 | "metadata": {}, 2272 | "source": [ 2273 | "\n", 2274 | "---\n", 2275 | "#### **1. `np.sum()` Fonksiyonu**\n", 2276 | "\n", 2277 | "`np.sum()` fonksiyonu, bir dizinin elemanlarının toplamını hesaplamak için kullanılır.\n", 2278 | "\n", 2279 | "---" 2280 | ] 2281 | }, 2282 | { 2283 | "cell_type": "code", 2284 | "execution_count": null, 2285 | "metadata": {}, 2286 | "outputs": [], 2287 | "source": [ 2288 | "import numpy as np\n", 2289 | "\n", 2290 | "# Bir dizi oluşturalım\n", 2291 | "arr = np.array([1, 2, 3, 4, 5])\n", 2292 | "\n", 2293 | "# Dizinin elemanlarının toplamını hesaplayalım\n", 2294 | "total_sum = np.sum(arr)\n", 2295 | "print(\"Dizinin Toplamı:\", total_sum) # Çıktı: 15" 2296 | ] 2297 | }, 2298 | { 2299 | "cell_type": "markdown", 2300 | "metadata": {}, 2301 | "source": [ 2302 | "\n", 2303 | "---\n", 2304 | "#### **2. `np.prod()` Fonksiyonu**\n", 2305 | "\n", 2306 | "`np.prod()` fonksiyonu, bir dizinin elemanlarının çarpımını hesaplamak için kullanılır.\n", 2307 | "\n", 2308 | "---" 2309 | ] 2310 | }, 2311 | { 2312 | "cell_type": "code", 2313 | "execution_count": null, 2314 | "metadata": {}, 2315 | "outputs": [], 2316 | "source": [ 2317 | "# Dizinin elemanlarının çarpımını hesaplayalım\n", 2318 | "total_product = np.prod(arr)\n", 2319 | "print(\"Dizinin Çarpımı:\", total_product) # Çıktı: 120" 2320 | ] 2321 | }, 2322 | { 2323 | "cell_type": "markdown", 2324 | "metadata": {}, 2325 | "source": [ 2326 | "\n", 2327 | "---\n", 2328 | "#### **3. `np.mean()` Fonksiyonu**\n", 2329 | "\n", 2330 | "`np.mean()` fonksiyonu, bir dizinin elemanlarının ortalama değerini hesaplamak için kullanılır.\n", 2331 | "\n", 2332 | "---" 2333 | ] 2334 | }, 2335 | { 2336 | "cell_type": "code", 2337 | "execution_count": null, 2338 | "metadata": {}, 2339 | "outputs": [], 2340 | "source": [ 2341 | "# Dizinin elemanlarının ortalama değerini hesaplayalım\n", 2342 | "mean_value = np.mean(arr)\n", 2343 | "print(\"Dizinin Ortalaması:\", mean_value) # Çıktı: 3.0" 2344 | ] 2345 | }, 2346 | { 2347 | "cell_type": "markdown", 2348 | "metadata": {}, 2349 | "source": [ 2350 | "\n", 2351 | "---\n", 2352 | "#### **4. Diğer İşlem Fonksiyonları**\n", 2353 | "\n", 2354 | "Numpy'de birçok işlem fonksiyonu bulunur ve bu fonksiyonlar çeşitli istatistiksel hesaplamaları yapmak için kullanılır. Bazı diğer yaygın işlem fonksiyonları şunlardır:\n", 2355 | "- `np.min()`: Dizinin minimum değerini bulur.\n", 2356 | "- `np.max()`: Dizinin maksimum değerini bulur.\n", 2357 | "- `np.std()`: Dizinin standart sapmasını hesaplar.\n", 2358 | "- `np.median()`: Dizinin ortanca değerini bulur.\n", 2359 | "\n", 2360 | "Bu işlem fonksiyonları, Numpy'de veri analizi ve işlemlerinde sıkça kullanılır ve dizilerdeki verilerin çeşitli istatistiksel özelliklerini hesaplamak için önemlidir.\n", 2361 | "\n", 2362 | "---" 2363 | ] 2364 | }, 2365 | { 2366 | "cell_type": "markdown", 2367 | "metadata": {}, 2368 | "source": [ 2369 | "# **3. Lineer Cebir İşlemleri**" 2370 | ] 2371 | }, 2372 | { 2373 | "cell_type": "markdown", 2374 | "metadata": {}, 2375 | "source": [ 2376 | "\n", 2377 | "---\n", 2378 | "## **3.1 Matris Çarpımı**\n", 2379 | "\n", 2380 | "Numpy'de matris çarpımı, iki matris arasındaki çarpma işlemidir. Matris çarpımı, lineer cebirde ve matris işlemlerinde sıkça kullanılan önemli bir işlemdir. Numpy'nin `np.dot()` fonksiyonu veya `@` operatörü ile matris çarpımı gerçekleştirilir.\n", 2381 | "\n", 2382 | "---" 2383 | ] 2384 | }, 2385 | { 2386 | "cell_type": "markdown", 2387 | "metadata": {}, 2388 | "source": [ 2389 | "\n", 2390 | "---\n", 2391 | "### **`@` Operatörü ile Matris Çarpımı**\n", 2392 | "\n", 2393 | "`@` operatörü, Numpy'de matris çarpımı için kullanılabilir. Bu operatör, iki matrisin çarpımını daha okunabilir bir şekilde ifade etmek için kullanılır.\n", 2394 | "\n", 2395 | "---" 2396 | ] 2397 | }, 2398 | { 2399 | "cell_type": "code", 2400 | "execution_count": null, 2401 | "metadata": {}, 2402 | "outputs": [], 2403 | "source": [ 2404 | "# @ operatörü ile matris çarpımını hesaplayalım\n", 2405 | "matrix_product_operator = matrix1 @ matrix2\n", 2406 | "print(\"Matris Çarpımı (@ operatörü ile):\\n\", matrix_product_operator)" 2407 | ] 2408 | }, 2409 | { 2410 | "cell_type": "markdown", 2411 | "metadata": {}, 2412 | "source": [ 2413 | "\n", 2414 | "---\n", 2415 | "## **3.2 Determinant ve Ters Matris Hesaplama**\n", 2416 | "\n", 2417 | "Numpy'de, bir matrisin determinantı ve ters matrisi hesaplanabilir. Determinant, bir kare matrisin bir tür ölçüsüdür ve matrisin nasıl davrandığını anlamak için önemlidir. Ters matris ise, bir matrisin tersine çarpıldığında birim matrisi veren bir matristir." 2418 | ] 2419 | }, 2420 | { 2421 | "cell_type": "markdown", 2422 | "metadata": {}, 2423 | "source": [ 2424 | "\n", 2425 | "---\n", 2426 | "### **3.2.1 Determinant Hesaplama**\n", 2427 | "\n", 2428 | "Numpy'de, bir matrisin determinantını hesaplamak için `np.linalg.det()` fonksiyonu kullanılır.\n", 2429 | "\n", 2430 | "---" 2431 | ] 2432 | }, 2433 | { 2434 | "cell_type": "code", 2435 | "execution_count": null, 2436 | "metadata": {}, 2437 | "outputs": [ 2438 | { 2439 | "name": "stdout", 2440 | "output_type": "stream", 2441 | "text": [ 2442 | "Matrisin Determinantı: -2.0000000000000004\n" 2443 | ] 2444 | } 2445 | ], 2446 | "source": [ 2447 | "import numpy as np\n", 2448 | "\n", 2449 | "# Bir kare matris oluşturalım\n", 2450 | "matrix = np.array([[1, 2], [3, 4]])\n", 2451 | "\n", 2452 | "# Matrisin determinantını hesaplayalım\n", 2453 | "determinant = np.linalg.det(matrix)\n", 2454 | "print(\"Matrisin Determinantı:\", determinant)" 2455 | ] 2456 | }, 2457 | { 2458 | "cell_type": "markdown", 2459 | "metadata": {}, 2460 | "source": [ 2461 | "\n", 2462 | "---\n", 2463 | "### **3.2.2 Ters Matris Hesaplama**\n", 2464 | "\n", 2465 | "Numpy'de, bir matrisin tersini hesaplamak için `np.linalg.inv()` fonksiyonu kullanılır.\n", 2466 | "\n", 2467 | "---" 2468 | ] 2469 | }, 2470 | { 2471 | "cell_type": "code", 2472 | "execution_count": null, 2473 | "metadata": {}, 2474 | "outputs": [ 2475 | { 2476 | "name": "stdout", 2477 | "output_type": "stream", 2478 | "text": [ 2479 | "Matrisin Tersi:\n", 2480 | " [[-2. 1. ]\n", 2481 | " [ 1.5 -0.5]]\n" 2482 | ] 2483 | } 2484 | ], 2485 | "source": [ 2486 | "# Matrisin tersini hesaplayalım\n", 2487 | "inverse_matrix = np.linalg.inv(matrix)\n", 2488 | "print(\"Matrisin Tersi:\\n\", inverse_matrix)" 2489 | ] 2490 | }, 2491 | { 2492 | "cell_type": "markdown", 2493 | "metadata": {}, 2494 | "source": [ 2495 | "# **4. Universal Functions (ufuncs):**" 2496 | ] 2497 | }, 2498 | { 2499 | "cell_type": "markdown", 2500 | "metadata": {}, 2501 | "source": [ 2502 | "\n", 2503 | "---\n", 2504 | "## **4.1 ufuncs Nedir?**\n", 2505 | "\n", 2506 | "ufuncs (universal functions), Numpy'de evrensel işlevler olarak bilinen, dizi elemanlarında element-wise (eleman bazlı) işlemler gerçekleştiren işlevlerdir. Bu işlevler, Numpy dizilerindeki her bir elemana aynı işlemi uygulayarak hızlı ve verimli bir şekilde çalışır.\n", 2507 | "\n", 2508 | "ufuncs'ler, matematiksel operasyonlar, trigonometrik fonksiyonlar, mantıksal operasyonlar ve diğer birçok işlem için kullanılabilir." 2509 | ] 2510 | }, 2511 | { 2512 | "cell_type": "markdown", 2513 | "metadata": {}, 2514 | "source": [ 2515 | "\n", 2516 | "---\n", 2517 | "## **4.2 Matematiksel İşlemler**\n", 2518 | "\n", 2519 | "Numpy'deki birçok matematiksel işlem, ufuncs kullanılarak gerçekleştirilir. Örneğin, toplama, çıkarma, çarpma, bölme gibi işlemler ufuncs aracılığıyla eleman bazlı olarak uygulanır.\n", 2520 | "\n", 2521 | "---" 2522 | ] 2523 | }, 2524 | { 2525 | "cell_type": "code", 2526 | "execution_count": null, 2527 | "metadata": {}, 2528 | "outputs": [], 2529 | "source": [ 2530 | "import numpy as np\n", 2531 | "\n", 2532 | "# İki dizi oluşturalım\n", 2533 | "arr1 = np.array([1, 2, 3, 4])\n", 2534 | "arr2 = np.array([5, 6, 7, 8])\n", 2535 | "\n", 2536 | "# Toplama işlemi\n", 2537 | "result_addition = np.add(arr1, arr2)\n", 2538 | "\n", 2539 | "# Çarpma işlemi\n", 2540 | "result_multiplication = np.multiply(arr1, arr2)\n", 2541 | "\n", 2542 | "print(\"Toplama İşlemi Sonucu:\", result_addition)\n", 2543 | "print(\"Çarpma İşlemi Sonucu:\", result_multiplication)" 2544 | ] 2545 | }, 2546 | { 2547 | "cell_type": "markdown", 2548 | "metadata": {}, 2549 | "source": [ 2550 | "\n", 2551 | "---\n", 2552 | "## **4.3 Trigonometrik Fonksiyonlar**\n", 2553 | "\n", 2554 | "ufuncs, trigonometrik fonksiyonlar gibi matematiksel fonksiyonlar için de kullanılır.\n", 2555 | "\n", 2556 | "---" 2557 | ] 2558 | }, 2559 | { 2560 | "cell_type": "code", 2561 | "execution_count": null, 2562 | "metadata": {}, 2563 | "outputs": [], 2564 | "source": [ 2565 | "# Sinüs fonksiyonu\n", 2566 | "result_sin = np.sin(arr1)\n", 2567 | "\n", 2568 | "# Kosinüs fonksiyonu\n", 2569 | "result_cos = np.cos(arr2)\n", 2570 | "\n", 2571 | "print(\"Sinüs Fonksiyonu Sonucu:\", result_sin)\n", 2572 | "print(\"Kosinüs Fonksiyonu Sonucu:\", result_cos)" 2573 | ] 2574 | }, 2575 | { 2576 | "cell_type": "markdown", 2577 | "metadata": {}, 2578 | "source": [ 2579 | "\n", 2580 | "---\n", 2581 | "## **4.4 Mantıksal İşlemler**\n", 2582 | "\n", 2583 | "Mantıksal işlemler de ufuncs aracılığıyla gerçekleştirilir.\n", 2584 | "\n", 2585 | "---" 2586 | ] 2587 | }, 2588 | { 2589 | "cell_type": "code", 2590 | "execution_count": null, 2591 | "metadata": {}, 2592 | "outputs": [], 2593 | "source": [ 2594 | "# Mantıksal ve işlemi\n", 2595 | "result_and = np.logical_and(arr1 > 2, arr2 < 7)\n", 2596 | "\n", 2597 | "# Mantıksal veya işlemi\n", 2598 | "result_or = np.logical_or(arr1 > 2, arr2 < 7)\n", 2599 | "\n", 2600 | "print(\"Mantıksal 've' İşlemi Sonucu:\", result_and)\n", 2601 | "print(\"Mantıksal 'veya' İşlemi Sonucu:\", result_or)" 2602 | ] 2603 | } 2604 | ], 2605 | "metadata": { 2606 | "kernelspec": { 2607 | "display_name": "Python 3", 2608 | "language": "python", 2609 | "name": "python3" 2610 | }, 2611 | "language_info": { 2612 | "codemirror_mode": { 2613 | "name": "ipython", 2614 | "version": 3 2615 | }, 2616 | "file_extension": ".py", 2617 | "mimetype": "text/x-python", 2618 | "name": "python", 2619 | "nbconvert_exporter": "python", 2620 | "pygments_lexer": "ipython3", 2621 | "version": "3.11.2" 2622 | } 2623 | }, 2624 | "nbformat": 4, 2625 | "nbformat_minor": 2 2626 | } 2627 | --------------------------------------------------------------------------------