【发布时间】:2012-12-17 17:43:39
【问题描述】:
我想知道是否可以有一个函数从数组中删除所有二维重复节点,即:
A(xy,1:2)
A(xy,1) = /1,2,4,5,5,9,6,8,2,5,4/
A(xy,2) = /5,2,5,6,7,6,6,3,7,6,6/
之后
A(xy,1) = /1,2,4,5,5,9,6,8,2,4/
A(xy,2) = /5,2,5,6,7,6,6,3,7,6/
当我尝试在空白程序中执行@HighPerformanceMark 的代码时,有几个我没有得到的编译错误:
repeating.f90:24.20:
mask(ix) = NOT(ANY(arraya(1,:ix-1)==arraya(1,ix).AND.&
1
Error: 'i' argument of 'not' intrinsic at (1) must be INTEGER
repeating.f90:29.11:
ALLOCATE(index_vector, source=PACK([(ix, ix=1,numcols) ],mask))
1
Error: Array specification required in ALLOCATE statement at (1)
repeating.f90:32.11:
...
对此你有什么想说的?
【问题讨论】:
-
抱歉,我使用了
not,而我应该使用.not.,而我的编译器没有抱怨。我现在已经编辑了我的答案,所以再试一次。至于你的第二个问题,你确定你的编译器实现了源分配吗?这是一个新功能,流行编译器的最新版本处于 2003 年实施的不同阶段。 -
嗨,马克,确实,现在编译器只抱怨分配命令,所以我想我没有它们。我正在使用 F90,而且我是 fortran 的新手,你能帮助如何下载这些库或功能以进行源分配吗?我实际上可以分配一些数组,但是这个顺序对我来说有点新。
-
源分配是 Fortran 2003 的一项功能,并非所有编译器都实现。您的办法是获得一个确实实现该功能的编译器,这不是我可以帮助您的。
-
可以做
ALLOCATE(index_vector(count(mask)), source=,某些版本的gfortran不喜欢没有指定边界的源分配。支持来源分配本身。
标签: function fortran fortran90