fortran - 在fortran中用零填充数组而不使用循环
问题描述
我有两个数组,我想比较它们的大小并将尾随零添加到较短的数组中。
例如-对于数组-
y1=(/ 1,2,3 /)
y2=(/ 1,2,3,4,5 /)
最终结果应该是——
y1=(/ 1,2,3,0,0 /)
y2=(/ 1,2,3,4,5 /)
我对 Fortran 很陌生,从我所知道的到现在,可以这样完成:-
integer, allocatable :: y1(:),y2(:)
integer :: l1,l2,i
.
.
.
! some code to generate y1 and y2 here
.
.
.
l1=size(y1)
l2=size(y2)
if (l1>l2) then
do i=l2+1,l1
y2(i)=0
enddo
else if (l2>l1) then
do i=l1+1,l2
y1(i)=0
enddo
endif
我想知道是否有更好的方法来做到这一点,最好是不涉及循环的方法,因为我正在处理的实际问题可能有巨大的向量
解决方案
这是一种方法:
y1 = RESHAPE(y1,SHAPE(y2),pad=[0])
没有显式循环。正如@VladimirF 评论的那样,较短的数组必须重新分配,这种方法将其留给编译器和运行时来处理。
如果您担心这种方法的性能,或者担心它在使用显式循环的版本中的性能,并且担心性能如何随数组大小而变化,那么请运行一些测试。如果发现显式重新分配和一两个循环比这种“聪明”的方法更快,我不会感到惊讶。
推荐阅读
- jsp - [/WEB-INF/jsp/report/TestArchive.jsp] 中 [c] 的来自 TagLibraryValidator 的验证错误消息
- ios - 在 didFinishPicking 方法中获取大尺寸图像
- list - Python程序从日期列表中提取年份部分
- python - 如何使用 oauth2 使用 dbm api python 自动化 dv360 报告?
- python - 如何根据前序、中序和后序遍历方法输入节点 P 并且输出应该是 P 之后的节点?
- java - 我们如何才能仅沿曲线而不是包含区域显示曲线的工具提示(使用 piccolo2d 绘制)?
- mongodb - 无论如何,mongodb每个月都会自动在linux中创建一个新表吗?
- azure-ad-b2c-custom-policy - 使用 OnItemExistenceInStringCollectionClaim 禁用 LocalAccount
- git - 用于导出的 git archive 的替代品
- javascript - 如何仅在产品环境中使用 Rollbar?(角度)