首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fortran90中的阵列剖面算法

Fortran90中的阵列剖面算法
EN

Stack Overflow用户
提问于 2018-04-03 17:51:35
回答 1查看 78关注 0票数 2

这个代码片段:

代码语言:javascript
复制
real*8 a(20,5,2)
real*8 b(5)
real*8 c(20,5,2)

! define a vals ....

! define b vals ....

c(1:20, :, 1:2) = a(1:20,:,1:2)*b

不会编译,因为b不具有与ac相同的形状。当然,我希望b的五个值与ac中间索引的5个值相匹配,但是Fortran编译器不理解这一点。有什么办法告诉它我想要什么吗?我知道我可以在一个更大的数组中复制b,以匹配ac的形状,但这会浪费内存。我也可以将整件事情放在循环中,但对于我正在尝试编写的实际代码来说,这将是非常麻烦的。还有其他的可能性吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-03 18:04:37

我认为Fortran是在阻止你朝自己的脚开枪,或者,如果你愿意的话,坚持要求你清楚你想要乘的数组元素。表达式

代码语言:javascript
复制
 a(1:20,:,1:2)

是第二个索引的每一个值都包含40个元素的部分。现在还不清楚b的5个元素是什么。

我怀疑您正在寻找spread函数,它是用于“uprank”数组的函数。如果没有澄清,就很难提出适当的spread应用程序,也许如果您进一步解释,您将得到一个比这个更好的答案。

见鬼,让我们继续不加澄清.

我解释OP的意图是这样计算c的元素:

代码语言:javascript
复制
  DO ix = 1,5
     c(:,ix,:) = a(:,ix,:)*b(ix)
  END DO

它可以被

代码语言:javascript
复制
  c = a * SPREAD(SPREAD(b,dim=1,ncopies=20),dim=3,ncopies=2)

我只进行了非常有限的测试,教训可能是遵循@ptb的建议,坚持使用do循环。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49636315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档