我使用kmeans(k = 200)和视频中的特征点创建了一个集群。共有359个视频,每个视频都有不同的帧数。
X = []
Y = []
for video in dataset:
X.append(video["features"])
Y.append(video["category"])
附加到X的每个值都是一个要素数组,而Y是分类的
print (np.shape(X))
print (np.shape(Y))
返回
(359,200) (359,)
我试图用
plt.scatter(X,Y, c=kmeans.labels_, cmap='rainbow')
plt.scatter(kmeans.cluster_centers_[:,0] ,kmeans.cluster_centers_[:,1], color='black')
并收到错误消息
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-45-7b6bea3c931e> in <module>()
31 print (np.shape(X))
32 print (np.shape(Y))
---> 33 plt.scatter(X,Y, c=kmeans.labels_, cmap='rainbow')
34 plt.scatter(kmeans.cluster_centers_[:,0] ,kmeans.cluster_centers_[:,1], color='black')
35 '''
2 frames
/usr/local/lib/python3.6/dist-packages/matplotlib/axes/_axes.py in scatter(self, x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, verts, edgecolors, **kwargs)
4180 y = np.ma.ravel(y)
4181 if x.size != y.size:
-> 4182 raise ValueError("x and y must be the same size")
4183
4184 if s is None:
ValueError: x and y must be the same size
我尝试了X [:,0]和许多类似的变体,但又遇到了另一个错误
TypeError: list indices must be integers or slices, not tuple
有人可以帮我如何为绘图功能输入信息吗? 另外,我已经将以前的kmeans聚类输出保存为腌制文件。是否可以加载该文件并创建散点图。谢谢您的答复。
答案 0 :(得分:0)
绘图时,x
和y
必须具有一维且具有相同的尺寸。您收到错误消息,因为y
的大小为359,而x的大小为200。x[0]
与x[0,:]
相同,它是200个数字。参见numpy array indexing and slicing。如果要在x中绘制所有数组,则可以执行以下操作:
for i in range(x.shape[1]):
plt.scatter(x[:,i], y)
要绘制成子图:
fig, axes = plt.subplots(40,5, figsize=(20,100))
for i in range(x.shape[1]):
ax = axes.flat[i]
ax.scatter(x[:,i], y)
另一种可能性是减小尺寸。例如,使用sklearn.decomposition.PCA
,但这是一个单独的问题。