【发布时间】:2015-03-22 18:33:04
【问题描述】:
当我尝试使用 kmeans 时:
int K = 4;
Mat labels;
Mat centers;
std::vector<float> values;
// (put a bunch of values into "values" here...)
kmeans(values, K, labels, TermCriteria(TermCriteria::COUNT + TermCriteria::EPS, 10, 1.0), 10, KMEANS_PP_CENTERS, centers);
我收到错误:“错误:(-215) N >= K in function kmeans”
values.size() = 360000,所以 N 明显大于 K。什么给出?谢谢。
【问题讨论】:
-
这可能是一个愚蠢的评论,但您使用的是
red_values而不是values。您输入的red_values的大小是多少? -
这是 Stackoverflow 输入错误!固定的!对不起,谢谢。 :-)
-
嗯...在调用
kmeans之前,您是否检查过values和K的大小?我知道您已经在帖子中放置了大小,但是您是否实际放入了调试语句或使用调试器检查以验证values和K的大小?仅当数据集中的点数少于所需的聚类数时,才会产生该错误。此外,每个数据点占据一行,而每一列都是一个变量。您是否以这种方式排列数据?您是否确保每一行代表一个数据点? -
是的-就在kmeans之前,K == 4和values == 360000。我想我不确定您在第二点中的意思。值只是一个向量...关于标签和中心我需要指定什么吗?
-
看看下面安德烈的评论。我以为您在输入矩阵,但您使用的是
vector(实际上,我从您的原始帖子中错过了这个)。您需要更改您的数据,使其成为一个包含 1 列的矩阵。