下面的代码块继续返回相同的错误,我不明白为什么......有帮助吗?我已经将numpy导入为np并定义了xx1和xx2,但代码仍然返回错误。是什么导致了这个问题?
def plot_decision_regions(X,y,classifier,resolution=0.02):
markers = ('s','x','o','^','v')
colors = ('red','blue','lightgreen','gray','cyan')
cmap = ListedColormap(colors[:len(np.unique(y))])
x1_min = X[:,0].min() -1
x1_max = X[:,0].max() +1
x2_min = X[:,1].min() -1
x2_max = X[:,1].max() +1
xx1 = np.meshgrid(np.arange(x1_min,x1_max,resolution))
xx2 = np.meshgrid(np.arange(x2_min,x2_max,resolution))
Z = classifier.predict(np.array([xx1.ravel(),xx2.ravel()]).T)
Z = Z.reshape(xx1.shape)
plt.contourf(xx1,xx2,Z,alpha=0.3,cmap=cmap)
plt.xlim(xx1.min(),xx1.max())
plt.ylim(xx2.min(),xx2.max())
for idx, cl in enumerate(np.unique(y)):
plt.scatter(x=X[y==cl,0],y=X[y==cl,1],alpha=0.8,c=colors[idx],marker=markers[idx],label=cl,edgecolor='black')
>>> plot_decision_regions(X,y,classifier=ppn)
个字符
2条答案
按热度按时间6kkfgxo01#
np.meshgrid()
的返回值是一个列表。从坐标向量返回坐标矩阵的列表。
(Source .)
然后xx1和xx2是列表,你得到这个错误。
可以使用
np.array()
将列表转换为数组。gpfsuwkq2#
调试时最好的两个朋友是numpydocs和交互式测试环境
这些线路是:
字符串
让我们用一个简单的范围来做arange。我不会讨论如何选择最小值和最大值。但是要小心使用像
0.02
这样的分数步长。端点处理可能是不可预测的,因此arange
.arange
中的实际元素数量会警告这一点。型
正如
meshgrid
告诉我们的那样,结果是list
,列表没有ravel
。你清楚为什么要使用meshgrid
和ravel
吗?一个简单的arange
就足够了。通常情况下,
meshgrid
用于2个或多个数组。仅用于一个数组几乎没有什么好处。型
现在让我们尝试在最后一行创建数组(使用另一个
xx1
代替xx2
):型
注意,如果
xx2
有不同的长度-我还没有看最小/最大值是否做任何事情来控制长度。加上我前面提到的分数step
问题。型
这个错误消息有点晦涩,但它是处理“不规则”数组的长序列中的最新一个。
numpy
不能从长度不同的数组中生成数字dtype数组。同样,我不知道你的总体目标是什么,但这应该有助于隔离在构造一个数组以提供给分类器时的潜在问题。