询问正确的 do 循环 fortran

Asking proper do loop fortran

我写了一个代码,用于测量距离k的意思。

所以,r 是我的数据点的数组。我想用每个质心减少数据点的每个坐标。所以,流程就像,J 只有在 y=k 时才会改变。与此同时,我应该继续前进(我的号码应该保持更新+1)。 distance 是二维数组,Z 是列索引。 Distance 是空的二维数组,其值将由归约结果填充,这就是每次计算都应更新 i 值的原因。 N 是数据点的数量,k 是簇的数量。 z、k 和 n 是不同的值。

我当前代码的问题,

do i=1,z
   do j=1,n
      y=1
     do while 
        y<=k 
        distance(1,i)=abs( r(1,j) - centroid (1,y) )
        distance(2,i)=abs( r(2,j) - centroid (2,y) )
        y=y+1
     end do
   end do
end do

问题是,i 值没有保持更新。我需要我的价值保持增长,+1

这是一个猜测,因为我仍然对你的问题感到困惑,但这是你想要的吗?

i = 0
do j=1,n
  do y=1,k
    i = i+1
    distance(:,i) = abs(r(:,j)-centroid(:,y))
  enddo
enddo

所以在 r 数组上循环 j,在 centroid 数组上循环 y(但最多 k),并递增 i 两者的每个组合?

这假设 distance 数组足够大 i 不会超出它。