回 帖 发 新 帖 刷新版面

主题:一个有关数组的问题求解答

有一个三维的数组a(10,20,30)

do k=1,30
  if(a(:,:,k)/=0)then

我想让k一定时,a里面其他值只要有不为零的数,就执行下面的语句,但这样写出来不对,希望谁能指点一下,谢谢

回复列表 (共7个回复)

沙发

用函数all试试
只要有不为零, 思路就不是你写的那段代码反应的意思了, 应该改为
IF (.NOT.(ALL(a(:,:,k) == 0))) THEN

板凳

if( any( a(:,:,k) /= 0 ) )then

3 楼

蹲坑的时候才突然想起, 顺着楼主代码转译不能得到楼主的意图, 马上上来改了. 但没转过弯来.
还是adda用any的代码好.

4 楼

if (any(a(:,:,t))/=0)then
              1
错误: (1)处内建函数‘any’的实参‘mask’必须是一个逻辑数组

出现了以上错误。我最后是这么来实现的:
if (sum(a(:,:,t))/=0.) then

这个就没问题。。。。。
还是谢谢两位,如果能进一步找出问题所在,就太感谢了

5 楼

楼上, 你的括号范围搞错了. 
    any(a(:,:,t))/=0)
应为
    any(a(:,:,t)/=0))
认真对比一下差别.

另你用求和的方法实现, 除非你能保证矩阵中所有元素是同号的, 否则正负整数加起来刚好等于0的几率还是蛮高的. 具体怎么处理自己掂量了.

6 楼

且sum的效率不如any,建议还是用any吧:)
其实:
/=
就是
.NE.

7 楼

i see.

我来回复

您尚未登录,请登录后再回复。点此登录或注册