主题:一个有关数组的问题求解答
bellanchor
[专家分:0] 发布于 2010-07-27 09:34:00
有一个三维的数组a(10,20,30)
do k=1,30
if(a(:,:,k)/=0)then
我想让k一定时,a里面其他值只要有不为零的数,就执行下面的语句,但这样写出来不对,希望谁能指点一下,谢谢
回复列表 (共7个回复)
沙发
yeg001 [专家分:14390] 发布于 2010-07-27 10:37:00
用函数all试试
只要有不为零, 思路就不是你写的那段代码反应的意思了, 应该改为
IF (.NOT.(ALL(a(:,:,k) == 0))) THEN
板凳
adda [专家分:1520] 发布于 2010-07-27 11:12:00
if( any( a(:,:,k) /= 0 ) )then
3 楼
yeg001 [专家分:14390] 发布于 2010-07-27 11:22:00
蹲坑的时候才突然想起, 顺着楼主代码转译不能得到楼主的意图, 马上上来改了. 但没转过弯来.
还是adda用any的代码好.
4 楼
bellanchor [专家分:0] 发布于 2010-07-27 12:48:00
if (any(a(:,:,t))/=0)then
1
错误: (1)处内建函数‘any’的实参‘mask’必须是一个逻辑数组
出现了以上错误。我最后是这么来实现的:
if (sum(a(:,:,t))/=0.) then
这个就没问题。。。。。
还是谢谢两位,如果能进一步找出问题所在,就太感谢了
5 楼
yeg001 [专家分:14390] 发布于 2010-07-27 13:27:00
楼上, 你的括号范围搞错了.
any(a(:,:,t))/=0)
应为
any(a(:,:,t)/=0))
认真对比一下差别.
另你用求和的方法实现, 除非你能保证矩阵中所有元素是同号的, 否则正负整数加起来刚好等于0的几率还是蛮高的. 具体怎么处理自己掂量了.
6 楼
cgl_lgs [专家分:21040] 发布于 2010-07-27 15:08:00
且sum的效率不如any,建议还是用any吧:)
其实:
/=
就是
.NE.
7 楼
bellanchor [专家分:0] 发布于 2010-07-27 15:25:00
i see.
我来回复