我参考了这里的代码示例(http://scikit-learn.org/stable/auto_examples/linear_model/plot_iris_logistic.html),特别是对这一行iris.data[:, :2]
感到困惑,因为iris.data
是一个150行4列的数组,我认为这意味着选择所有行和前两列。我在这里询问以确认我的理解是否正确,因为我花了时间但在官方文档中找不到这种语法定义。
另一个问题是,我使用以下代码来获取行数和列数,不确定是否有更好的、更优雅的方法?我的代码更符合Python原生风格,不确定NumPy是否有更好的风格来获取相关值。
print len(iris.data) # 获取行数
print len(iris.data[0]) # 获取列数
使用Python 2.7和miniconda解释器。
print(__doc__)
# 代码来源:Gaël Varoquaux
# 由Jaques Grobler修改以用于文档
# 许可证:BSD 3条款
import numpy as np
import matplotlib.pyplot as plt
from sklearn import linear_model, datasets
# 导入一些数据来玩
iris = datasets.load_iris()
X = iris.data[:, :2] # 我们只取前两个特征。
Y = iris.target
h = .02 # 网格中的步长
logreg = linear_model.LogisticRegression(C=1e5)
# 我们创建一个Neighbors分类器的实例并拟合数据。
logreg.fit(X, Y)
# 绘制决策边界。为此,我们将为网格中的每个点分配一个颜色[x_min, m_max]x[y_min, y_max]。
x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5
y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
Z = logreg.predict(np.c_[xx.ravel(), yy.ravel()])
# 将结果放入颜色图中
Z = Z.reshape(xx.shape)
plt.figure(1, figsize=(4, 3))
plt.pcolormesh(xx, yy, Z, cmap=plt.cm.Paired)
# 也绘制训练点
plt.scatter(X[:, 0], X[:, 1], c=Y, edgecolors='k', cmap=plt.cm.Paired)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.xticks(())
plt.yticks(())
plt.show()
此致,Lin
回答:
你是对的。第一个语法选择了前两列/特征。另一种查询维度的方法是查看iris.data.shape
。这将返回一个包含长度的n维元组。你可以在这里找到一些文档:http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html
import numpy as np
x = np.random.rand(100, 200)
# 选择前两列
y = x[:, :2]
# 获取行长度
print (y.shape[0])
# 获取列长度
print (y.shape[1])
# 维度数量
print (len(y.shape))