2016-09-08 7 views
2

これはkmeanアルゴリズムの実装の一部です。私は、メモリの2つのブロックを持って、両方の*cluster_centerは、クラスタの現在の中心であると*new_centroidsは、クラスタの点の平均を取った後、新たな重心を表すよう、同じサイズで:メモリの2つのブロック間の値の等価性を比較する

double *cluster_center = malloc((k * dim) * sizeof(double)); 
double *new_centroids = malloc((k * dim) * sizeof(double)); 

私は結果をコピーするには、次のループを持っていますnew_centroidsから問題なくcluster_centerに:実際には

for (int i = 0; i < k; ++i) { 
    memcpy(&cluster_center[i * dim], &new_centroids[i * dim], dim * sizeof(double)); 
} 

、私はCは、私は一度私のアルゴリズムを終了したいので、値の両方のブロックのを比較するために、組み込み、それの機能を持っているかどうかを知りたいですの値*new_centroids*cluster_centerは同じ(すなわち変化しなかった)。私は本当にそれをする方法を知らない。

は、あなたが探している機能は memcmp(比較メモリ)であるあなた

+0

バイナリ比較のために 'memcmp()'を調べてください。 'double'' + 0.0'、' -0.0'と 'NaN'を比較するには不十分かもしれませんが、特別な扱いが必要です。 – chux

+0

あなたは['memcmp'](http://en.cppreference.com/w/c/string/byte/memcmp)のような意味ですか? –

+0

両方の配列の**値**が似ている場合は**の値を比較することを意味します。私は 'memcmp'は実際の値の類似性ではなく長さだけを比較すると思います!! – Kris

答えて

0

ありがとうございます。あなたが文を実行した直後:

memcpy(destination, source, size); 

その後、

memcmp(destination, source, size); 

はゼロを返す必要があります。

関連する問題