此函数和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的大小文章来源:https://www.toymoban.com/news/detail-574561.html
检验后和matlab的unique函数应该是一致的。文章来源地址https://www.toymoban.com/news/detail-574561.html
到了这里,关于Fortran 定义unique函数删除数组中的重复数值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!