Numpy Kütüphanesine ait fonksiyonların kullanım farklılıkları hakkında

Merhabalar;

Numpy kütüphanesine ait bazı fonksiyonların iki türlü kullanımı var. Bunlardan biri bildiğimiz fonksiyon gibi normal kullanım diğeri ise metot gibi kullanımı. Nasıl olurda fonk. metot gibi kullanılabilir açıklayabilir misiniz ?

import numpy as np

array=np.array([1,2,3])
copyarray=array.copy()
copyarray2=np.copy(array)

bu kodu çalıştırdığımızda herhangi bir hata yok…

  1. Örnek olarak kütüphaneye ait copy() fonk.'nun iki farklı kullanımını gösterdim.
  2. Hem fonk. hem de metot olarak kullanılabilmesinin sebebi nedir?
  3. Bu iki kullanımın farkı var mıdır ? var ise nelerdir ?

Numpy kaynak kodlarını incelemek lazım. Belki birisi sınıfa aitken ve örnekleme ile elde edilirken, diğeri normal modüle ait bir fonksiyondur?

Bir sey sorucam normal array(List) ile numpy kutuphanesi ile kullandigimiz array arasinda hiz farki nedir? numpy array olusturmak bende bir 2 saniye aliyor baya yavas gibi
Boyle olmamasi gerekmez mi?

Çok kullanan birisi değilim ama veri analizi, yapay zeka, derin öğrenme, görüntü işleme gibi bir çok alanda hem hız, hem de ek özellikleri için tercih edildiğini biliyorum. Nasıl bir array oluşturduğunuzu bilmiyorum o yüzden bir şey diyemem.

numpy.array([1,2,3,4,5])
:confused:

Emin misiniz :sweat_smile: Az önce denedim saniye bile sürmedi.

Help on built-in function copy:

copy(…) method of numpy.ndarray instance
a.copy(order=‘C’)

Return a copy of the array.

Parameters

order : {‘C’, ‘F’, ‘A’, ‘K’}, optional
Controls the memory layout of the copy. ‘C’ means C-order,
‘F’ means F-order, ‘A’ means ‘F’ if a is Fortran contiguous,
‘C’ otherwise. ‘K’ means match the layout of a as closely
as possible. (Note that this function and :func:numpy.copy are very
similar, but have different default values for their order=
arguments.)

Valla gecen gun bir bot yaziyordum ve bir liste vardi o listeye urettigi rastgele gift keylerini koyuyordu ve bunu her zwman yapmasi gerekiyordu bir numpy i deniyim dedim arrayi olusturdum bir 2,1 saniyemi aldi vazgectim :confused:

Help fonksiyonu yardimimiza(help) yetisti :rofl:

Bu doğru bir karşılaştırma ve değerlendirme şekli değil. Küçük bir dizi üzerinden yavaş demek doğru olmaz. Başka bir etkenin etkili olduğunu düşünüyorum nedense.

1 Beğeni

Evet Copy() fonksiyonu Py standart fonksiyonlarından biri belki de python böyle algılıyor ama sadece bu fonk. için geçerli değil numpy kütüphanesinin birkaç fonk. için geçerli bu…

Peki sorun nedir? Böyle olmasında dikkat çekilecek bir durum göremedim. Yerine göre ihtiyacınız olanı kullanırsınız. Hangisini kullanmanız tavsiye edilmişse onu kullanabilirsiniz. Aynı isimde birkaç fonksiyon olabilir, bunda bir sorun yok. copy() fonksiyonu Python’da bir çok veri yapısında kullanılan bir fonksiyon adı ve yerine göre farklı amaçlarla kullanılıyor. Yukarıda sorduğunuz “hem fonksiyon hem metot olarak nasıl kullanılabilir?” sorusuna aynı sandığınız şeyler aslında aynı isimli olan ama farklı yerlerde tanımlanan fonksiyonlar olabilir cevabını vermiştim ilk cevabımda. Olabilir diyorum çünkü kaynak kodları incelemek gerekir.

1 Beğeni

Numpy kütüphanesinde bazı işleri yapmanın birden fazla yolu var.

Mesela bir array’ı kopyalamanın yollarından biri bir fonksiyonu, bir diğeri ise bir metodu kullanmak.

Aynı işi yapacak metod ve fonksiyonlar oluşturmanın önünde bir engel yok ki. Hatta tek farkları aldıkları parametreler olabilir.

Bu arada numpy.lib.function_base modülüne bakarsanız copy fonksiyonunun şöyle tanımlandığını görebilirsiniz:

@array_function_dispatch(_copy_dispatcher)
def copy(a, order='K'):
    return array(a, order=order, copy=True)

numpy.ndarray.copy ise bir eklenti (extension) olarak -büyük ihtimalle- C’de veya C++'da yazılmış, türünün “built-in” olmasından bunu anlayabiliyoruz:

>>> import numpy
>>> a=numpy.array([])
>>> a.copy
<built-in method copy of numpy.ndarray object at 0x0000022A4CAC3F80>
>>> type(a.copy)
<class 'builtin_function_or_method'>
>>> 

numpy’ın içe aktarılma süresi ile karıştırıyorsunuz bence.

4 Beğeni

Sizinle anlaşamayacağız galiba :slight_smile:

daha basit anlatayım.

print("merhaba") yerine "merhaba".print() yazabiliyor musunuz ? Bunu yapmayı denerseniz;

AttributeError: ‘str’ object has no attribute ‘print’ hatası alırsınız. Yani bu demek oluyor ki string nesnenin print diye bir özelliği yok.

bunun aksine numpy kütüphanesine ait bazı fonksiyonlar tam olarak bunun aksine hem metot hemde fonksiyon olarak çalışabiliyor. Bu da demek oluyorki numpy kütüphanesiyle oluşturulan bir arrayin yani ndarray veri tipinin x fonksiyonun özelliğini barındırdığını gösterir. Benim sorum ise nasıl olabildiğiydi, şimdi cevabını araştırıp bulduğum için anlatma fırsatına sahip oldum, ancak iki farklı kullanım arasındaki farklılık var mıdır konusunda hala bilgi sahibi olamadım. Size gelince dikkatli okumanızı ve anlamanızı temenni ederim…

Anladığınızdan oldukça emin konuşuyorsunuz ama söylediğiniz şey aynı fonksiyon hem fonksiyon hem de metot olarak nasıl kullanılıyor diyorsunuz. Ben de diyorumki aynı isimli iki fonksiyon olabilir ve birisi numpy içerisinde tanımlı bir fonksiyon, diğeri numpy.array sınıfının bir metodu olabilir. Yani iki ayrı copy() fonksiyonu var ve farkettiyseniz birisinde diziyi parametre olarak veriyorsunuz diğerinde vermiyorsunuz.

Özet şu; birbirinden bağımsız iki ayrı yerde bulunan ama isimleri aynı olan bir fonksiyon/metod var ortada ve bu yapılamaz bir şey değil. Ben nasıl yapılabilir kısmına dikkat çektim, bir örnekle de göstereyim belki anlaşılır.

class array:
    def copy(self):
        # kopyalama

def copy(dizi):
    return array(a, order=order, subok=subok, copy=True)

dizi = array()
yeni_dizi = dizi.copy()
yeni_dizi2 = copy(dizi)

Peki sorun nedir? Böyle olmasında dikkat çekilecek bir durum göremedim. uslubuyla yaklaşırsanız elbette vereceğim cevap böyle olur. Hele ki ezberci yaklaşıma sahip olmayan biri olarak Hangisini kullanmanız tavsiye edilmişse onu kullanabilirsiniz. bağlamında anlamadan öğrenmem mümkün değil. Siz dahil buradaki gönül esaslı ilgilenen kardeşlerimden beklentim, yeni öğrenmeye başladığım yazılım alanında , son cevabınızın da arasında bulunduğu mantıklı ve örnekli yaklaşımdı. Son örnek için de teşekkür ediyorum. Nitekim aynı şeylerden de bahsetmiş olduk.

1 Beğeni

Üslubumda niyetim kabalık,aşağılama vs değildi, yanlış anlaşıldıysa özür dilerim. Sadece neden buna dikkat ettiğinizi sordum. Yani numpy ile uğraşan birisinin fonksiyon ve sınıflar konusunu geride bıraktığını düşünmüştüm…

1 Beğeni

Estağfurullah. Anlaşabildiğimize sevindim. Fazla detaycı karakterimden mütevellit küçük ayrıntıların kafamı karıştırması, kendi şahsımın yazılımda alanında yetersizliğinin de yansıması diyebiliriz. Cevap bulamadığım da veya anlamadığımda ilk koştuğum forumun burasının olmasının sebebi de basit ve şahsım için önemli hale gelen konunun yargısız tartışılabilmesi. Sizin de burada olmanıza sevindim. Soracak daha çok sorularım var :slight_smile:

2 Beğeni