- 定位问题,主要集中在性质,范围,位置。
性质:问题的本质是什么。
范围:问题的范围有多大。
位置:问题出现在什么位置。
原因:推测问题产生的原因。
解决方法:根据推测的原因进行解决。
例如:在定位程序中的bug,首先要清楚报错的提示是什么含义。
eg: 报错提示: TypeError: ‘numpy.ndarray’ object is not callable
‘numpy.ndarray’ 对象不可调用
问题的位置:对应程序相应的位置
问题的范围:检查输入,输出。
(1)检查输入,正常。
(2)检查输出,输出变量名和函数名相同,那么循环调用时,就会错误地将变量当做函数。
所以会提示’numpy.ndarray’ 对象不可调用。
canny= canny(Gaussphoto, 30, 90)
修改输出变量名:
Cannyphoto = canny(Gaussphoto, 30, 90)
总结:
- 合理地定位问题有利于高效地解决问题。
注:如何推测问题产生的原因。
1)要根据提示的问题做进一步分析,要列出所有可能导致问题产生的可能性,然后逐一排查。
最有效的方式就是进行debug,这样可以进一步缩小问题的范围。
2)通过问题的表象是推导问题表象产生的深层次原因,层层递推,也即5why法,通过不断地剖析,才能从根本上解决问题。浅尝辄止,终究会使问题浮于表面,思考质量也会大大降低。
eg: 问题:FCM聚类算法运行一段时间,就会出现定义的分类数和最终的分类中心数目不一致。
例如:假设需要进行3分类,结果最终的分类中心为[0.6, 0.2, 0.2]
可能的原因:原因1:多次迭代导致
问题1: 为啥多次迭代会导致这样的问题
原因2:隶属度矩阵权值相同,即[0.5, 0.25, 0.25]
问题2:为啥隶属度矩阵相同
原因3:迭代过程中分类中心相同
问题3:为啥迭代过程分类中心相同
原因4:初始化隶属度矩阵时,对应的两类隶属度相同
通过这样的层层分析,找到问题产生的根因,最终通过优化隶属度矩阵的方法,避免了两类隶属度相同的情况,问题得到解决。
总结:遇到问题,要结合直觉和理性分析去解决,而不是盲目行动,这样可能会导致浪费大量的时间和精力。
方案解决的标准:
(1)是否可以彻底解决该问题。
(2)解决问题的方法是否可行,是否满足要求。
(3)解决问题的方式是否高效。