此函数和matlab中的[c,ia,ic] = unique(arr)是一致的,只能满足一维数组,二维数组其实就是加个循环即可。
subroutine unique(arr,C,ia,ic,count,n)
implicit none
integer :: n
integer :: arr(n)
integer :: C(n), ia(n), ic(n)
integer :: i, j, k, count, temp
count = 0
do i = 1, n
C(i) = 0
ic(i) = 0
end do
do i = 1, n
do j = 1, count
if (arr(i) == C(j)) then
ic(i) = j
exit
end if
end do
if (ic(i) == 0) then
count = count + 1
C(count) = arr(i)
ic(i) = count
end if
end do
! 排序结果数组 C
do i = 1, count-1
do j = 1, count-i
if (C(j) > C(j+1)) then
temp = C(j)
C(j) = C(j+1)
C(j+1) = temp
! 更新 ic 数组
do k = 1, n
if (ic(k) == j) then
ic(k) = j+1
else if (ic(k) == j+1) then
ic(k) = j
end if
end do
end if
end do
end do
! 初始化 ia 数组
do i = 1, n
ia(i) = i
end do
end subroutine unique
参数说明:
arr:要算的函数
C:unique后的数组,和arr一样长,需要count函数来获取,C(1:count)所有的不重复数值
ia:arr(ia)=C
ic:C(ic) = arr
count:不重复数值的个数
n:arr的大小
检验后和matlab的unique函数应该是一致的。