Numpy Ders 2

In [1]:
import numpy as np

6 elemanlı rastgele tamsayılardan oluşan bir numpy dizisi oluşturalım

In [2]:
x1=np.random.randint(10, size=6)
In [3]:
x1
Out[3]:
array([0, 0, 0, 5, 7, 6])

2 boyutlu 3 x 4 lük bir numpy dizisi oluşturalım. Yani bir matris.

In [4]:
x2=np.random.randint(10, size=(3,4)) # 3
In [5]:
x2
Out[5]:
array([[2, 1, 6, 4],
       [7, 3, 4, 9],
       [9, 6, 6, 2]])
In [6]:
x3 = np.random.randint(10, size=(3, 4, 5))  # Üç boyutlu bir numpy dizisi. Yani bir tansör
In [7]:
x3
Out[7]:
array([[[6, 3, 3, 6, 1],
        [1, 5, 5, 3, 6],
        [1, 9, 8, 0, 3],
        [3, 6, 8, 7, 1]],

       [[2, 4, 5, 9, 2],
        [5, 3, 3, 4, 1],
        [6, 4, 8, 0, 4],
        [6, 6, 7, 5, 3]],

       [[0, 9, 9, 3, 9],
        [9, 2, 5, 3, 8],
        [3, 5, 2, 9, 0],
        [4, 7, 0, 7, 7]]])
In [8]:
x3.ndim  # x3 dizisinin boyut sayısı
Out[8]:
3
In [9]:
x3.shape # x3'ün şekli
Out[9]:
(3, 4, 5)
In [10]:
x3.size # x3'ün toplam eleman sayısı
Out[10]:
60
In [11]:
x3.dtype # x3'ün data tipi
Out[11]:
dtype('int64')
In [12]:
x1
Out[12]:
array([0, 0, 0, 5, 7, 6])
In [13]:
x1[0] # x1'in ilk elemanı
Out[13]:
0
In [14]:
x1[-1] # x1'in son elemanı
Out[14]:
6
In [15]:
x2
Out[15]:
array([[2, 1, 6, 4],
       [7, 3, 4, 9],
       [9, 6, 6, 2]])
In [16]:
x2[0,0]  # 1.satır 1.sütun elemanı
Out[16]:
2
In [17]:
x2[1, 2] # 2. satır 3. sütun elemanı
Out[17]:
4
In [18]:
x2[0,0] = 49  # 1.satır 1.sütun elemanını değiştirelim
In [19]:
x2
Out[19]:
array([[49,  1,  6,  4],
       [ 7,  3,  4,  9],
       [ 9,  6,  6,  2]])
In [20]:
x1
Out[20]:
array([0, 0, 0, 5, 7, 6])
In [21]:
x1[0]=-3.1 # bu sayı -3'e yuvarlanacak. zira x1 bir tamsayı dizisi
In [22]:
x1
Out[22]:
array([-3,  0,  0,  5,  7,  6])
In [23]:
x=np.arange(10)
In [24]:
x
Out[24]:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

x[start:stop:step] komutu

In [25]:
x[3:5] # x dizisinin 3. indeksten 5. indekse olan elemanlarını görelim
Out[25]:
array([3, 4])
In [26]:
x[1:8:2] # x'in 1. indeksten 8.indekse elemanlarını 2'şer atlayarak görelim
Out[26]:
array([1, 3, 5, 7])
In [27]:
x[::-2]
Out[27]:
array([9, 7, 5, 3, 1])
In [28]:
y='merhaba' # python dizilerinde de benzer bir işlem uygulayabiliriz.
In [29]:
y[::-2]
Out[29]:
'aarm'
In [30]:
x2
Out[30]:
array([[49,  1,  6,  4],
       [ 7,  3,  4,  9],
       [ 9,  6,  6,  2]])
In [31]:
x2.ndim
Out[31]:
2
In [32]:
x2[0:2,1:3] # x2'nin ilk iki satırı ve 2. 3. sütünlarının kesişim matrisi
Out[32]:
array([[1, 6],
       [3, 4]])
In [33]:
x2[:,1] # x2'nin 1. sütunu. Dikkat sonuç bir satır vektörü.
Out[33]:
array([1, 3, 6])

Lineer cebirde satır vektörü ve sütun vektörü farklı nesnelerdir. Bu ayrım numpy'da yok. Numpy'da bir array boyutu olan bir nesne. 1 boyutlu nesneler vektör, 2 boyutlu nesneler matris, 2den büyük boyutlu nesneler tensör. Eğer sütun vektörü oluşturmak istersek, 2 boyutlu bir array oluşturmamız lazım.

In [34]:
xx=np.random.randint(10, size=(3, 1))
In [35]:
xx
Out[35]:
array([[4],
       [1],
       [6]])
In [36]:
xx.ndim
Out[36]:
2
In [37]:
y=x2[:2,:2] # x2 nin ilk iki satır ve ilk iki sütunundan oluşan alt matrise x2 diyelim
In [38]:
y
Out[38]:
array([[49,  1],
       [ 7,  3]])
In [39]:
y[0,:]=np.array([-3,0]) # y'nin birinci satırını değiştirelim
In [40]:
y
Out[40]:
array([[-3,  0],
       [ 7,  3]])
In [41]:
x2 # süpriz. x2'de değişti. Bu davranışı bekliyor muyduk? 
Out[41]:
array([[-3,  0,  6,  4],
       [ 7,  3,  4,  9],
       [ 9,  6,  6,  2]])

Aslında y yeni bir array değil. Sadece x2 array'inin bir alt matrisine verdiğimiz isim. Dolayısıyla y'de yapacağımız her işlem, x2'yi de etkiler.

In [42]:
z=x2
In [43]:
z[1,1]=84
In [44]:
z
Out[44]:
array([[-3,  0,  6,  4],
       [ 7, 84,  4,  9],
       [ 9,  6,  6,  2]])
In [45]:
x2
Out[45]:
array([[-3,  0,  6,  4],
       [ 7, 84,  4,  9],
       [ 9,  6,  6,  2]])
In [46]:
y
Out[46]:
array([[-3,  0],
       [ 7, 84]])

Yeni bir isme, bir array'i aşağıdaki gibi kopyalayabiliriz.

In [47]:
w = y.copy()
In [48]:
w
Out[48]:
array([[-3,  0],
       [ 7, 84]])
In [49]:
w[0,0]=13
In [50]:
w
Out[50]:
array([[13,  0],
       [ 7, 84]])
In [51]:
y # w'da yapılan işlem y'yi değiştirmedi.
Out[51]:
array([[-3,  0],
       [ 7, 84]])
In [52]:
g = np.arange(12)

Bir dizinin şeklini değiştirmek için reshape fonksiyonunu kullanırız.

In [53]:
g
Out[53]:
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
In [54]:
g.reshape((2,6))
Out[54]:
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11]])
In [55]:
g.reshape((3,4))
Out[55]:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
In [56]:
g.reshape((4,3))
Out[56]:
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])
In [57]:
g.reshape((2,8)) # Eğer eleman sayısından daha fazla veya daha az bir şekle dönüştürmek istersek hata mesajı alırız.
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-57-0017e4740156> in <module>
----> 1 g.reshape((2,8)) # Eğer eleman sayısından daha fazla veya daha az bir şekle dönüştürmek istersek hata mesajı alırız.

ValueError: cannot reshape array of size 12 into shape (2,8)
In [58]:
g.reshape((2,2))
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-58-4dd6f4feddc5> in <module>
----> 1 g.reshape((2,2))

ValueError: cannot reshape array of size 12 into shape (2,2)
In [59]:
x = np.array([1, 2, 3])
In [60]:
x
Out[60]:
array([1, 2, 3])
In [61]:
x.ndim
Out[61]:
1
In [62]:
y=x.reshape((1,3)) # bu işlem bir boyutlu x array'inden iki boyutlu bir y array'i oluşturur.
In [63]:
y
Out[63]:
array([[1, 2, 3]])
In [64]:
y.ndim
Out[64]:
2
In [65]:
z=x.reshape((3, 1, 1))
In [66]:
z
Out[66]:
array([[[1]],

       [[2]],

       [[3]]])
In [ ]: