2013-09-01 25 views
14

benim kodudur vardır:Numpy AttributeError: 'şamandıra' nesne hiçbir özellik 'exp' İşte

def sigmoid(X, T): return (1.0/(1.0 + np.exp(-1.0*np.dot(X, T)))) 

Ve bu hat bana hata "AttributeError: 'şamandıra' nesne hiçbir özelliği 'ni exp' vardır" verir. X, t Numpy ndarray.

+4

'np' değerini bir float değerine yeniden atadığınız anlaşılıyor. –

+4

"X" veya "T", "float64" yerine "dize" nesnesiyle oluşturuldu mu? – user2357112

+1

Hayır, yeniden atanmış olmadı. (X) türü nipeldir, tip (X [0] [0]) –

cevap

11

Muhtemelen ve/veya T. sorudan fonksiyon inşaat ok X için giriş değerleri ile bir sorun var:

import numpy as np 
from math import e 

def sigmoid(X, T): 
    return 1.0/(1.0 + np.exp(-1.0 * np.dot(X, T))) 

X = np.array([[1, 2, 3], [5, 0, 0]]) 
T = np.array([[1, 2], [1, 1], [4, 4]]) 

print X.dot(T) 
print 
# Just to see if values are ok 
print [1./(1. + e ** el) for el in [-5, -10, -15, -16]] 
print 
print sigmoid(X, T) 

Sonuç: Muhtemelen

[[15 16] 
[ 5 10]] 

[0.9933071490757153, 0.9999546021312976, 0.999999694097773, 0.9999998874648379] 

[[ 0.99999969 0.99999989] 
[ 0.99330715 0.9999546 ]] 

sizin girişinin d_type var diziler. X değiştirme:

X = np.array([[1, 2, 3], [5, 0, 0]], dtype=object) 

verir:

Traceback (most recent call last): 
    File "/[...]/stackoverflow_sigmoid.py", line 24, in <module> 
    print sigmoid(X, T) 
    File "/[...]/stackoverflow_sigmoid.py", line 14, in sigmoid 
    return 1.0/(1.0 + np.exp(-1.0 * np.dot(X, T))) 
AttributeError: exp 
+3

Evet teşekkürler. Ben dtype hakkında bilmiyordum ve sadece yazın (X). X = X.astype (float) yaptım ve işe yaradı. –

+0

böylece dype = object ile dizilerde ortalama() gibi dizi işlemleri kullanılamaz? Nedenini merak ediyorum? – gcamargo

+2

Bu hata iletisi çok yanıltıcıdır: sorun 'dtype' aslında' numpy.object' dır, ancak mesaj 'numpy.float64'' log10' özniteliğine sahip olmadığını veya aritmetik yöntem ne olursa olsun – deeenes

4

Böyle float32 türünü np.dot(X, T) dönüştürmek:

z=np.array(np.dot(X, T),dtype=np.float32)

def sigmoid(X, T): 
    return (1.0/(1.0 + np.exp(-z))) 

Umarım nihayet çalışacak!

İlgili konular