from numpy import array
import matplotlib
import matplotlib.pyplot as plt
from fileread import file2matrix
datingDataMat,datingLabels = file2matrix('iris_data.txt')
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(datingDataMat[:,1], datingDataMat[:,2],15.0*array(datingLabels), 15.0*array(datingLabels))
plt.show()
此代码显示错误::
TypeError: unsupported operand type(s) for *: 'float' and 'numpy.ndarray'
根据作者的说法,我应该可以根据数据标签生成不同的颜色。
答案 0 :(得分:3)
数组应包含数值。
>>> 15.0 * array([1,2])
array([ 15., 30.])
>>> 15.0 * array(['1','2'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for *: 'float' and 'numpy.ndarray'
检查datingLabels
。
答案 1 :(得分:2)
我遇到了类似的问题。这就是我做的。我将标签转换为包含数值。我正在使用python 2.7,不确定3.3版本是否会自动处理它。
newdatLabel = []
表示datLabel中的项目:
if item == 'largeDoses':
newdatLabel.append(2)
elif item == 'smallDoses':
newdatLabel.append(1)
elif item == 'didntLike':
newdatLabel.append(0)
答案 2 :(得分:2)
这是另一种方法
作者提供了datingTestSet2.txt
你可以在这里下载(我假设你已经完成了)
http://www.manning.com/pharrington/
您可以在此文件中找到列的值为数字
但仍然约会标签上充满了字符串值,如[&#39; 3&#39;,&#39; 2&#39;,&#39; 1&#39;,.....]
所以15.0 *数组(datingLabels)不起作用
要转换数组的类型,请使用.astype()方法
喜欢 15.0 *数组(datingLabels).astype(float)
from numpy import array
import matplotlib
import matplotlib.pyplot as plt
from fileread import file2matrix
datingDataMat,datingLabels = file2matrix('datingDataTest2.txt')
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(datingDataMat[:,1], datingDataMat[:,2],15.0*array(datingLabels).astype(float), 15.0*array(datingLabels).astype(float))
plt.show()
它应该有效!