|
发表于 2024-11-19 18:24:11
|
显示全部楼层
program kmeans_clustering
implicit none
integer, parameter :: n = 100, k = 3, max_iter = 100
real, dimension(n, 2) :: data
real, dimension(k, 2) :: centroids
integer, dimension(n) :: labels
integer :: i, j, iter, closest_centroid
real :: distance, min_distance
! Initialize data (for demonstration purposes, using random values)
call random_seed()
call random_number(data)
! Initialize centroids randomly from the data points
do i = 1, k
centroids(i, = data(i, 
end do
! K-means clustering algorithm
do iter = 1, max_iter
! Assign each data point to the nearest centroid
do i = 1, n
min_distance = huge(distance)
do j = 1, k
distance = sqrt((data(i, 1) - centroids(j, 1))**2 + (data(i, 2) - centroids(j, 2))**2)
if (distance < min_distance) then
min_distance = distance
closest_centroid = j
end if
end do
labels(i) = closest_centroid
end do
! Update centroids as the mean of assigned data points
do j = 1, k
centroids(j, = [0.0, 0.0]
end do
do i = 1, n
centroids(labels(i), 1) = centroids(labels(i), 1) + data(i, 1)
centroids(labels(i), 2) = centroids(labels(i), 2) + data(i, 2)
end do
do j = 1, k
centroids(j, = centroids(j, / sum(labels == j)
end do
end do
! Print results
print *, "Final centroids:"
do i = 1, k
print *, centroids(i, 
end do
print *, "Labels:"
do i = 1, n
print *, labels(i)
end do
end program kmeans_clustering |
|