我现在正在玩链接列表作为练习.
我在Cracking The Coding Interview书中看到的例子中没有LinkedList(管理器)类,只有Nodes,你可以在主函数中挂起头节点.
我查找了C++实现,但大多数似乎比C++更C风格,即不是面向对象的.它们使用结构体,没有类,并且有一个静态方法来删除列表,您需要明确记得调用它.我想写一个合理的RAII(资源获取是初始化)风格的C++类,带有合理的析构函数来处理内存释放,我想只使用一个Node类(没有LinkedList类).
我看到有这个工作的唯一方法是让Node的析构函数删除下一个Node,如果有的话,但是我已经读过这种递归删除是一个坏主意,因为你最终创建了一个与之相同长度的callstack.链表.
总结一下我的问题:
谢谢!
在Jupyter笔记本上本地运行并使用MNIST数据集(28k条目,每个图像28x28像素,接下来的时间为27秒)。
from sklearn.neighbors import KNeighborsClassifier
knn_clf = KNeighborsClassifier(n_jobs=1)
knn_clf.fit(pixels, labels)
Run Code Online (Sandbox Code Playgroud)
但是,以下过程需要1722秒,也就是说,要花费〜64 倍的时间:
from sklearn.model_selection import cross_val_predict
y_train_pred = cross_val_predict(knn_clf, pixels, labels, cv = 3, n_jobs=1)
Run Code Online (Sandbox Code Playgroud)
我天真的理解是cv = 3的cross_val_predict正在执行3倍交叉验证,因此我希望它可以拟合模型3次,因此至少需要3倍的时间,但是我不知道为什么会这样花64倍!
要检查它是否特定于我的环境,我在Colab笔记本上运行了相同的东西 -差异不那么极端(15x),但仍远高于我预期的〜3x:
我想念什么?为什么cross_val_predict比仅拟合模型要慢得多?
万一重要,我正在运行scikit-learn 0.20.2。
python performance machine-learning scikit-learn cross-validation
以下是Scala中的有效语句:
scala> var x: Option[Int] = Some(3)
x: Option[Int] = Some(3)
scala> var x: Option[Int] = None
x: Option[Int] = None
Run Code Online (Sandbox Code Playgroud)
以下内容无效:
scala> var x: Option[Int] = 3
<console>:7: error: type mismatch;
found : Int(3)
required: Option[Int]
var x: Option[Int] = 3
Run Code Online (Sandbox Code Playgroud)
到目前为止,这些例子对我有意义; Option [T]类型的值可以是Some [T]或None类型,因此编译器会阻止您分配既不是类型的值.
但是,Scala编译器似乎接受了这个:
scala> val x: Option[Int] = null
x: Option[Int] = null
Run Code Online (Sandbox Code Playgroud)
如果我然后尝试在选项上进行模式匹配(例如如下),我会得到我没想到的失败 - 为什么编译器不通过拒绝null的赋值来保护我?
x match {
case Some(y) => println("Number: ", y)
case None => println("No number")
}
Run Code Online (Sandbox Code Playgroud)