Python对我来说是新的,我正在用Python做一些机器学习代码。我的场景是,我正在从我的sql读取数据,并试图给这个数据一个形状,所以我可以使用它的MLP训练。
我的代码如下:
connection = mysql.connector.connect(host='localhost', port=3306, user='root', passwd='mysql', db='medicalgame')
cur = connection.cursor()
query = ""
cur.execute(query)
# X_train will be a list of list and later we'll convert it to a numpy ndarray
X_train = []
for row in cur:
X_train.add(row)
connection.close()
X_train should be ready
X_train = np.asarray(X_train)
print 'The shape of X_train is', X_train.shape
在调试期间,我得到的查询结果是这样的:(1, 1, 1, 2, u' f ', 1, 0, 0, 19)谁能帮助我如何,我可以修复错误,并给形状我的X_train,使MLP接受它作为输入?
意思很清楚。list
没有add
方法,因为它是有序的(它有一个dunder __add__
方法,但这是用于在列表之间添加)。你可以insert
,但你想append
。所以正确的方法是:
X_train = []
for row in cur:
X_train.append(row)
但是直接转换为列表的首选方式(迭代cur
元素以一种简单而高效的方式创建列表):
X_train = list(cur)
但是你不能这样做,因为你的列表包含虚假数据。幸运的是,您可以在嵌套的列表推导中将它们过滤掉,如下所示:
X_train = [[x for x in r if type(x)==int] for r in cur]
这将构建列表的列表,但过滤掉非整数值并将其提供给numpy.asarray
生成(使用您的示例数据):
[[ 6 1 1 1 2 1 0 0 19]
[ 6 1 1 1 2 1 0 0 14]]