Python sigmoid函数-类型错误

Python sigmoid函数-类型错误,python,arrays,numpy,Python,Arrays,Numpy,如果我第一次没有正确理解,我深表歉意,因为我对这个论坛和Python都是新手。我正在尝试进行逻辑回归,并希望计算S形函数 代码: import numpy as np csv_file_object = csv.reader(open('train.csv', 'rb')) header = csv_file_object.next() train_data=[]

如果我第一次没有正确理解,我深表歉意,因为我对这个论坛和Python都是新手。我正在尝试进行逻辑回归,并希望计算S形函数

代码:

import numpy as np

csv_file_object = csv.reader(open('train.csv', 'rb')) 
header = csv_file_object.next()                       

train_data=[]                                           

for row in csv_file_object:                             
    train_data.append(row[1:])                          

train_data = np.array(train_data) 

X = train_data

X = np.c_[ np.ones(N), X ]   # print type(X) gives <type 'numpy.ndarray'>

def sigmoid(z):
    s = 1.0 / (1.0 + np.exp**(-1.0 * z))
    return s

print sigmoid(X)
文件“C:\Users…”,第59行,以sigmoid格式

s = 1.0 / (1.0 + np.exp**(-1.0 * z))
TypeError:不支持*:“float”和“numpy.ndarray”的操作数类型

我尝试将1.0转换为1,然后在错误中使用“.astype(np.float)”和其他尝试获取“int”而不是“float”。我曾寻找过类似的问题,并查看过文档,但未能找到解决方案(或理解我确实在阅读解决方案!):

我的理解是,指数函数应该对数组中的每个元素执行按元素的指数运算


我缺少什么?

numpy.exp是一个函数,您正在尝试对该函数应用求幂运算符。Python显然不知道您在谈论什么


您需要选择numpy求幂或Python求幂,而不是两者都选择。查看您链接到的文档中的语法。

除了@roippi指出的语法错误外,您还可以使用
numpy
I/O函数;无需通过csv模块

另一个问题是,
csv
模块为您提供字符串,因此您的
train_数据
最终不是带有float
dtype
ndarray
(用于在numpy数组中存储何种对象的行话)

例如,类似这样的方法应该有效:

>>> !cat train.csv
a,b,c
1,2,3
2,3,4
4,5,6
>>> train_data = np.loadtxt("train.csv", skiprows=1, delimiter=",")
>>> train_data
array([[ 1.,  2.,  3.],
       [ 2.,  3.,  4.],
       [ 4.,  5.,  6.]])
>>> np.exp(train_data)
array([[   2.71828183,    7.3890561 ,   20.08553692],
       [   7.3890561 ,   20.08553692,   54.59815003],
       [  54.59815003,  148.4131591 ,  403.42879349]])
或者,您可以简单地强制转换。从你所拥有的开始,可能是这样的:

>>> train_data
array([['2', '3'],
       ['3', '4'],
       ['5', '6']], 
      dtype='|S1')
(注意此处的
dtype
)您可以指定类型:

>>> train_data.astype(float)
array([[ 2.,  3.],
       [ 3.,  4.],
       [ 5.,  6.]])
>>> np.array(train_data, dtype=float)
array([[ 2.,  3.],
       [ 3.,  4.],
       [ 5.,  6.]])

拆下**,它将被固定


np.exp
里面有幂函数,这就是为什么会出现错误的原因

啊,是的,我在看解决方案。谢谢。太好了,这是一种更简单的I/O方法。这对于解决这个问题也是必要的,因为我有一个字符串数组。谢谢。exp(-1.0*z)应该可以解决您的问题,(numpy.exp是指数函数,而不是欧拉数)
>>> train_data.astype(float)
array([[ 2.,  3.],
       [ 3.,  4.],
       [ 5.,  6.]])
>>> np.array(train_data, dtype=float)
array([[ 2.,  3.],
       [ 3.,  4.],
       [ 5.,  6.]])