• Yapay zeka soru ve sorunlarınızı uygun olan kategorilere açıp yanıt alabilirsiniz...

NumPy ndarray object is not callable hatası nasıl araştırılır?

Garfield

Yönetici
YZF Admin
Yaş
40
Konum
YurtDışı
Katılım
27 Eki 2026
Konular
488
Mesajlar
501
AI Seviyesi
Yeni
NumPy'deki bu hata, bir ndarray dizisinin fonksiyon gibi parantezle çağrıldığını gösterir. Önce traceback'teki hatalı satırı bulun, ardından parantez içeren ifadenin türünü type() ile doğrulayın. İfade gerçekten numpy.ndarray ise kullanım amacına göre () yerine indeksleme, öznitelik erişimi veya doğru bir dizi yöntemi kullanıldığında hata ortadan kalkar.

Hatanın anlamı​


ndarray, NumPy'nin çok boyutlu dizi nesnesidir. Fonksiyonlar gibi çağrılabilir değildir. Bu nedenle aşağıdaki varsayımsal örnek hata üretir:

Python:
import numpy as np

sayilar = np.array([10, 20, 30])
sonuc = sayilar()

Burada Python, sayilar değişkeninin bir fonksiyon olduğunu varsayarak onu çalıştırmaya uğraşır. Değişkenin değeri dizi olduğu için TypeError: 'numpy.ndarray' object is not callable hatası oluşur.

Hatalı ifadenin nasıl araştırılacağı​


Kodun çalıştığı Python ortamında, hatayı üreten satıra gitmek yeterli değildir; parantezden önceki nesnenin türünü de doğrulamak gerekir.
  1. Traceback içindeki ilgili kod satırını bulun. En alttaki satır hata türünü ve mesajını gösterir; dosya ve satır numarası ondan önceki son ilgili traceback kaydındadır. Özellikle () kullanılan ifadeyi inceleyin. sayilar() diziyi çağırır; sayilar.shape() ise tuple, sayilar.dtype() dtype nesnesini çağırmaya çalışır. Bu son iki durumda hata mesajındaki nesne türü numpy.ndarray olmayacaktır.
  2. Parantezden önceki nesnenin türünü yazdırın. Hatalı satırdan hemen önce aşağıdaki tanılama kodunu geçici olarak çalıştırın. Çıktı <class 'numpy.ndarray'> ise sorun, bu nesnenin fonksiyon gibi çağrılmasıdır.

    Python:
    print("değer:", sayilar)
    print("tür:", type(sayilar))
    print("çağrılabilir mi:", callable(sayilar))
  3. İfadenin amacını belirleyin. Bir eleman almak istiyorsanız köşeli parantez, dizinin özelliğini okumak istiyorsanız nokta gösterimi, hesaplama yapmak istiyorsanız uygun NumPy yöntemi veya işlevi kullanın.
  4. Düzeltilmiş satırı yeniden çalıştırın. Beklenen çıktı oluşuyorsa geçici print() satırlarını kaldırın. Hata sürerse parantezden önceki başka bir değişkeni de aynı yöntemle denetleyin; hata her zaman görünen dizi adıyla sınırlı olmayabilir.
Aşağıdaki ayrım, hangi sözdiziminin kullanılacağını hızlıca gösterir:
KodAnlamıDoğru kullanım
sayilar()Diziyi fonksiyon gibi çağırır; hata verir.sayilar
sayilar(0)Dizinin ilk elemanını çağrı gibi almaya çalışır.sayilar[0]
sayilar.shape()shape özniteliğini fonksiyon sanır.sayilar.shape
sayilar.dtype()dtype bilgisini fonksiyon sanır.sayilar.dtype
sayilar.sum()Dizinin sum yöntemini çağırır; bu kullanım geçerlidir.sayilar.sum()
Tablodaki son satır önemli bir ayrımdır: Her parantez hatalı değildir. sum(), mean() veya reshape() gibi gerçekten yöntem olan üyeler parantezle çağrılabilir. Hata, parantezden önceki nesnenin veya üyenin çağrılabilir olmamasından kaynaklanır.

Çalışan en küçük örnek​


Aşağıdaki örnekte üç farklı erişim biçimi karşılaştırılır:

Python:
import numpy as np

sayilar = np.array([10, 20, 30])

ilk = sayilar[0]
boyut = sayilar.shape
toplam = sayilar.sum()

print(ilk)      # 10
print(boyut)    # (3,)
print(toplam)   # 60

sayilar[0] ilk elemanı, sayilar.shape dizinin boyut bilgisini, sayilar.sum() ise yöntemi çalıştırarak toplamı verir. sayilar() bu üç işlemden hiçbirini ifade etmez.

Parantez doğru görünüyorsa hangi değişkeni kontrol etmeli?​


Bazen hata satırında doğrudan dizi çağrılmaz; bir fonksiyon adı daha önce diziyle ezilmiş olabilir:

Python:
import numpy as np

mean = np.array([1, 2, 3])
sonuc = mean([1, 2, 3])

Burada mean artık bir fonksiyon değil, dizidir. Bu nedenle mean(...) çağrısı başarısız olur. Hatalı addan hemen önce print(type(mean)) çalıştırın. Tür numpy.ndarray çıkarsa değişkene farklı bir ad verin veya fonksiyonu doğru modül adıyla çağırın; örneğin np.mean([1, 2, 3]).

Tanılama çıktısında tür numpy.ndarray değilse hata başka bir çağrılamayan nesneden kaynaklanıyor olabilir. Bu durumda traceback'teki tam ifadeyi ve parantezden önceki her parçanın türünü ayrı ayrı kontrol etmek gerekir.
 
Son düzenleme:

Sen de şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Geri
Üst