这一章完成后发现自己的基础还不牢固,先来复习下基础
( )———元组tuples
[ ]———列表list
{ }———字典dict
尤其是列表list,一定要看清有多少个[ ]
下边的错误就是由于基础不牢导致的
return np.matrix(centList), clusterAssment
提示错误ValueError: matrix must be 2-dimensional
或者TypeError: list indices must be integers or slices, not tuple
找到centList的赋值语句
centList[bestCentToSplit] = bestNewCents[0, :]
centList.append(bestNewCents[1, :])
根据错误提示可以看出是centList的数值有问题,加一条语句
print(centList)
可以看到输出大概是这样的
[matrix([[-122.54868607, 45.51882187]]),
matrix([[-122.65589505, 45.49371211]]),
matrix([[-122.842918, 45.646831]]),
matrix([[-122.7680632, 45.4665528]]),
matrix([[-122.68216889, 45.56573522]])]
所以很容易就知道怎么改了,赋值语句不应该把matrix型数据直接赋过去,应该先把数据转换格式再赋值,即
centList[bestCentToSplit] = bestNewCents[0, :].tolist()
centList.append(bestNewCents[1, :].tolist())
我满心欢喜地以为应该成功了,结果提示错误
ValueError: matrix must be 2-dimensional
输出的centList为
[[[-122.55924017857146, 45.52238271428571]],
[[-122.65691647999998, 45.50956080000001]],
[[-122.755383, 45.5949895]],
[[-122.7680632, 45.4665528]],
[[-122.40092849999999, 45.46897]]]
根据输出我们可以很容易知道多了一个[ ],使得centList的秩为1,所以接下来就是怎么去掉一个[ ],我想了很久(基础不牢固),后来查了一些资料,发现应该改成这样
centList[bestCentToSplit] = bestNewCents[0, :].tolist()[0]
centList.append(bestNewCents[1, :].tolist()[0])
然后,成功。