首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在复制到另一个可分配数组后,Fortran 90不会保持数组的下界/上界

在Fortran 90中,数组的下界(lower bound)和上界(upper bound)是数组的一个属性,它们定义了数组索引的有效范围。默认情况下,Fortran数组的下界是1,但可以通过在声明数组时指定下界来改变这一默认行为。

当你将一个数组复制到另一个可分配数组(allocatable array)时,新数组的大小(即上界和下界)通常会继承自源数组。然而,如果你在声明新数组时指定了不同的下界或上界,那么复制后的数组将会有不同的索引范围。

基础概念

  • 数组下界:数组索引可以取的最小值。
  • 数组上界:数组索引可以取的最大值。
  • 可分配数组:在Fortran 90中,可分配数组是一种动态大小的数组,其大小可以在运行时决定。

相关优势

  • 灵活性:可分配数组允许在运行时根据需要分配和释放内存,这提供了更大的灵活性。
  • 性能优化:通过为数组指定合适的下界,可以优化数据访问模式,从而提高性能。

类型

Fortran 90支持固定大小数组和可分配数组。固定大小数组在声明时必须指定大小,而可分配数组可以在运行时通过ALLOCATE语句分配。

应用场景

  • 动态数据结构:当需要在程序运行时动态改变数组大小时,使用可分配数组非常有用。
  • 模块化编程:在不同的模块中使用不同下界的数组可以提高代码的模块化和重用性。

问题及解决方法

如果你在复制数组时遇到了下界或上界不保持的问题,可能是因为以下原因:

  1. 显式指定新数组的下界或上界:在声明新数组时,如果你指定了不同的下界或上界,那么复制后的数组将会有不同的索引范围。
代码语言:txt
复制
! 假设有一个源数组
INTEGER, DIMENSION(1:10) :: sourceArray

! 声明一个新的可分配数组,指定不同的下界
INTEGER, ALLOCATABLE, DIMENSION(:) :: destArray

! 分配新数组,并指定下界为0
ALLOCATE(destArray(0:9))

! 复制数组
destArray = sourceArray
  1. 未正确分配新数组:如果你没有正确分配新数组,那么复制操作可能会失败或者导致未定义行为。
代码语言:txt
复制
! 错误的示例:未分配新数组
INTEGER, ALLOCATABLE, DIMENSION(:) :: destArray
destArray = sourceArray ! 这将导致错误

正确的做法是先分配新数组,然后再进行复制:

代码语言:txt
复制
! 正确的示例:先分配后复制
ALLOCATE(destArray(1:10))
destArray = sourceArray

结论

在Fortran 90中,复制数组到另一个可分配数组时,需要注意新数组的下界和上界。如果你希望保持源数组的下界和上界,确保在声明和分配新数组时使用相同的下界和上界。如果需要不同的索引范围,可以在声明新数组时指定不同的下界和上界,但要注意复制操作的正确性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

计算机为什么要从 0 开始计数?

这个问题超纲了,程序喵不会,但是本着对科学敬畏之心,经过大量搜索查证,我终于找到了答案。 故事还要从一位真正大佬艾兹格·迪科斯彻(Dijkstra)讲起, ?...在任何一种表示中,两个子序列相邻,最好是其中一个上界等于另外一个下界,但这还不能抉择出a和b方式哪种更好,继续分析; 假设序列里要包含最小自然数,如果使用b和d这种方式,那下界就必须是个非自然数,...这里如果使用≤表示上界,那一个空子序列表示方式也将会很丑陋,所以对于上界,大佬结论是更喜欢使用a和d中<方式,结合上一小段分析,a方式最终获胜,继续分析; 当需要表示一个长度为N序列时,如果想通过下标来区分其中元素...我们知道Python中数组也是将0作为起始下标,对此Python之父Guido van Rossum也给出过正面回答,下面贴出他翻译语录: ?...之前几门编程语言(Algol,Fortran, Pascal)有使用1作为起始索引,有使用某个变量作为索引。而推动我使用0作为起始索引原因之一就是切片语法。

1.2K20
  • Go语言学习5-切片类型

    如果被指定,那么切片表达式求值结果那个切片值容量就不再是该切片表达式操作对象容量与该表达式中元素下界索引之间差值,而是容量上界索引与元素下界索引之间差值。...slice5 = slice5[:cap(slice5)] 如上再切片,可以访问和修改 array2 值中对应索引值 [2,10) 范围之内元素值。...如果 slice5 值作为数据载体传递给了另一个程序,那么这个程序可以随意地更改 array2 值中某些元素值。...此时,slice5 容量为 6(容量上界索引与元素下界索引差值)。对于切片操作来说,被操作对象容量是一个不可逾越限制。...sliceB 值中元素复制到 sliceA 值中。

    13710

    Fortran陷阱——可分数组size

    早期Fortran程序多使用静态数组。在编译时,静态数组被分配固定存储空间,且程序运行过程中静态数组大小是不会改变。为了能够存储足够多数据,静态数组大小需要足够大,这会造成内存浪费。...如果静态数组大小不够大,程序运行也可能会出现错误。 Fortran90标准之后,我们可以很方便地使用可分数组。...使用allocatable属性定义可分数组,allocate和deallocate语句动态地为数组分配和释放内存。使用size语句可以查询可分数组大小(元素总数)。...然而第二次调用modify_size时,释放values内存没有分配values大小,size(values)值还是5。输出values值时程序会报错。...这个例子说明当使用可分数组时,查询可分数组大小前需要先查询其是否被分配了内存,即用allocated()查询,否则得到数组大小可能是这个数组上一次被分配大小。

    2.7K20

    清华&华为提出AABO:自适应最优化Anchor设置,性能榨取最后一步 | ECCV 2020 Spotlight

    分析了当前方法优劣,论文提出一种自适应anchor box优化方法AABO,该方法基于贝叶斯优化和Sub-Sample方法,能够自动切高效地搜索到最优anchor设置,榨干主流目标检测算法潜力...得到替代模型,使用采集函数(acquisition function)从候选集中选择一组合适超参数进行测试,采集函数需要能够很好地平衡exploitation和exploration,测试则是使用目标模型进行正常训练和验证...Upper and Lower Limits of the Anchors   论文对COCO数据集目标的尺寸和长宽比进行统计,并且得到了ratio上界下界: ? ? ?...图4   统计结果如上图所示,其中蓝点为每个目标,黄线分别为上界下界,中间黑色长方形为BOHB搜索实验搜索空间。...可以看到,有一部分搜索空间在上界下界之外,是无效搜索,所以约束搜索空间在上界下界之间是有必要。另外,图中有5个红色框,是论文为RPN每层设定对应搜索空间,下面会提到。

    87420

    AABO:自适应Anchor设置优化,性能榨取最后一步 | ECCV 2020 Spotlight

    分析了当前方法优劣,论文提出一种自适应anchor box优化方法AABO,该方法基于贝叶斯优化和Sub-Sample方法,能够自动且高效地搜索到最优anchor设置,榨干主流目标检测算法潜力...得到替代模型,使用采集函数(acquisition function)从候选集中选择一组合适超参数进行测试,采集函数需要能够很好地平衡exploitation和exploration,测试则是使用目标模型进行正常训练和验证...Upper and Lower Limits of the Anchors   论文对COCO数据集目标的尺寸和长宽比进行统计,并且得到了ratio上界下界: [1240] [1240] [图4]...  统计结果如上图所示,其中蓝点为每个目标,黄线分别为上界下界,中间黑色长方形为BOHB搜索实验搜索空间。...可以看到,有一部分搜索空间在上界下界之外,是无效搜索,所以约束搜索空间在上界下界之间是有必要。另外,图中有5个红色框,是论文为RPN每层设定对应搜索空间,下面会提到。

    87800

    基础算法策略总结-分而治之,动态规划,贪心策略; 回溯法和分支定界;

    ;(根据求解顺序,判断当前问题规模解,来自于那个子问题) 经典问题: 0-1背包问题(物品不可分割);最大子数组问题;最长公共子序列问题;最长公共子串问题;最小编辑距离问题;(有限情况选择)...选择当前局部最优解;贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略选择;选择贪心策略必须具备无后效性,即某个状态以前过程不会影响以后状态,只与当前状态有关。...分支限界算法,首先是确定一个合理限界函数,然后根据函数确定目标函数下界(该届最优解情况下可更新);然后按照广度优先策略遍历问题解空间树,某一分支上,依次搜索该结点所有孩子结点,分别估算这些孩子结点目标函数可能取值...(对于最小化问题估算结点下界,对于最大化问题,估算该结点上界);如果某个孩子结点目标函数值超出了目标函数界,则将其丢弃(限界),否则加入队列中; 其他算法思想:近似算法,随机算法和启发式算法;...保持更新,转载请注明出处;更多内容请关注cnblogs.com/xuyaowen; 回溯法参考链接:https://zhuanlan.zhihu.com/p/51882471

    1.1K20

    XGB-8: Xgboost加速故障时间生存分析

    第三位患者标签被称为被截断,因为由于某种原因实验者无法获得该标签完整测量。可能情况之一:患者第1010天幸存并于第1011天走出诊所,因此他死亡并没有直接观察到。...该模型形式如下: 其中: 是表示特征向量 是由个系数组向量,每个系数对应一个特征 是向量点积 是自然对数 和是随机变量 是输出标签 是已知概率分布随机变量。...因此,XGBoost 目标是通过拟合良好决策树集合来最大化(对数)似然性。 如何使用 第一步是将标签表示为范围形式,使得每个数据点都与两个数字关联,即标签下界上界。...Uncensored [a, a] ✔ ✔ Right-censored [a, +∞) ✔ ✘ Left-censored [0, b] ✔ ✔ Interval-censored [a, b] ✔ ✔ 将下界数值收集到一个数组中...(y_lower_bound),将上界数值收集到另一个数组中(y_upper_bound)。

    18110

    VBA中动态数组定义及创建

    大家好,今日我们继续讲解VBA数组与字典解决方案第19讲:动态数组定义及创建。VBA中,数组可分为固定数组和动态数组,也称为静态数组和动态数组。我们之前所定义数组,都是静态数组。...事前不知道数组大小时,可以声明数组为动态数组需要指定数组大小时,再使用ReDim语句分配数组实际元素个数。...1、动态数组是可以改变大小数组,通过在数组名称附带空括号来声明,如: Dim arrSheetName() as String 2、定义动态数组之后,必须使用ReDim来设置动态数组上界下界,...下面我们将通过一个实例来讲解动态数组利用:   比如一个工作表C列存储了学生姓名,现在我们需要把把有姓“王”学生存储在数组arr中,预先我们并不知道C列姓王学生有三十个还是五十个,所以,我们定义时代码可以这样...) '重新定义数组大小,元素共有xcount个 通过求出姓王学生个数从而知道数组下界 3 Application.WorksheetFunction.Transpose(arr) 讲数组arr

    3.3K40

    Java - 泛型

    extends T> 使用上界通配符可以将实际类型参数限制为指定类型或者指定类型子类,经过泛型擦除上界通配符被擦除成了指定类型,即泛型擦除会保留上界。...super T> 使用下界通配符可以将实际类型参数限制为指定类型或者指定类型父类,经过泛型擦除下界通配符会被擦除成Object类型,但是在编译期不允许传入非指定类型或其父类以外类型。...泛型参数T不可以指定下界,这是和通配符另一个区别: 1 2 3 4 // 编译错误 public void test(T t) { // Syntax...实际应用中,一般不直接对通配符泛型集合进行编辑操作,而是作为一个引用类型(可以是局部变量,或者是作为方法参数),并将另一个泛型集合对象赋值给该引用。...,则调用时传参不需要保持相同类型,因为?表示随机类型。 ● 可以使用多重限定,而不可以。 ● 无法创建参数化类型数组,但可以。

    56820

    为什么Java中“1000==1000”为false,而”100==100“为true?

    可能大家不知道 Integer a = 100 这种代码是看哪个源码,不要紧,我们可以看下其编译 class 文件。...{ // 缓存下界值,固定为-128 static final int low = -128; // 缓存上界值,可以通过系统属性进行配置 static final...// 默认情况下,缓存上界是127 int h = 127; // 尝试从系统属性java.lang.Integer.IntegerCache.high中获取自定义上界值...} catch( NumberFormatException nfe) { // 如果字符串无法解析为整数,忽略该属性并保持默认上界值 }...当我们使用 Integer 对象比较两个数时,实际上是比较对象内存地址。由于“100”缓存范围内,两个“100”实际上引用是同一个对象,所以返回 true。

    14410

    Java 泛型使用

    由示例同样可知,使用super关键字限定参数类型下界,与使用extends关键字限定参数类型上界有所不同,最大区别就是:类型形参T不能与super关键字配合使用。...,则T属性将默认为extends继承父类中最左边一个,这里即为Integer;而描述类,进行类型擦除将无法确定其类型。...根据以上两点,描述中,不能使用形式限定参数类型下界。...通配符下界使用有PECS(producer extends, consumer super)原则,producer可以根据上界进行元素读取,但是不确定类型,所以无法添加元素;consumer可以根据下界进行元素添加...泛型数组 普通数组使用中,存在如下情况: public class Test { public static void main(String[] args) { Integer

    79820

    leetcode327. Count of Range Sum

    这道题目是指,现有一个整数数组,并输入上界值upper和下界值lower,问数组中一共有多少组连续数组,其子数组中数字和在上界下界之内。...思路一:暴力循环 我们可以首先遍历一遍数组,计算子数组下标[0,i)所有元素和。根据该结果可以计算自数组[i,j)中所有元素和。接着计算所有子数组中元素和,并判断是否位于数值区间内。...,将计算整个数组符合条件数组问题切分为子问题,将数组一分为二,并分别计算左子数组符合条件数组个数,右子数组中符合条件数组个数和横穿左右数组符合条件数组个数。...计算横穿左右数组个数方法很有趣,这采用了归并排序思想,即无论左子数组元素或是右子数组元素如何变动,横穿左右数组个数都不会受影响。...因此,在对左右子数组进行排序,以左子数组每一位作为开头,右子数组中找到满足upper和lower区间第一个值,和超过upper区间第一个值。

    65130

    基础扩展 | 12. 二分查找算法

    “骗”小孩可以,明眼人一看就知道了其中玄机,我用是二分查找法。每次都能排除一半数字,对于100个数字,找到想要数字绝对不会超过7次。...就拿猜数字67来说,我第一次说1-100中间数字50,她说小了;然后我又猜50-100中间数字75,她说大了;我接着猜50-75中间数字62,她说小了;……,依此类推,最后第7次猜中结果。...我们以low和high分别代表数组中要查找范围下界上界,以middle表示查找范围中间位置。...假设我们要在[9,13,15,27,36,49,52,68,72,80,90]中查找数值68,下图2描述了具体查找过程。 ? 图2 最后找到68位于下标7位置,也就是数组第8个元素。..." & result & " 个数字是" & num Else MsgBox "数组中找不到数字" & num End If End Sub 运行结果如下图3所示。

    57430

    leetcode410. Split Array Largest Sum

    right); min = Math.min(min, Math.max(left, right)); } return min; } 这种方法大数据量场景下会出现超时问题...根据基本常识可知,数组最大元素决定了该数组分割出数组元素和下界,而数组元素和上界一定不会超过数组所有元素和。...确定了数组元素和上界下界之后, 就需要找出一种方法,来不断压缩区间直到最后一种。 可以使用中间位置作为数组元素和边界,即假设所有的连续数组和都不会超过mid值。...假如按照这种方式得到分割结果大于了规定m个,则说明mid值作为最大元素和上界并不能够做到只分割出m个子数组,因此最大元素和上界一定在mid和有界中间。...同理,假如按照这种方式得到分割结果小于等于规定m个,则说明mid值作为最大元素和上界能够满足分割出m个子数组,但是可能还存在更优解。

    45620

    NumPy 1.26 中文文档(四十五)

    config.have_f90c() — 如果 Fortran 90 编译器可用,则返回 True(即:简单 Fortran 90 代码编译成功)。...如果 funcname 返回 None,则不会生成任何源。如果 Extension 实例处理所有源生成器没有任何源,那么不会构建扩展模块。这是有条件地定义扩展模块推荐方法。...config.have_f90c() — 如果 Fortran 90 编译器可用(即:简单 Fortran 90 代码编译成功),则返回 True。...如果funcname返回None,则不会生成任何源。如果Extension实例处理所有源生成器没有源,那么将不会构建任何扩展模块。这是有条件地定义扩展模块推荐方式。...config.have_f90c() — 如果 Fortran 90 编译器可用,则返回 True(即:简单 Fortran 90 代码编译成功)。

    11810

    【知识】SAS数据分析完整笔记(3)

    (如果其数组元素还没有值则初值为缺失值) 数组元素名列表可以省略,array tests(3) 也可以在说明维数时用"下标下界:下标上界"来说明一个其它下标下界,如 ARRAY sales (95:97...2 数组函数 ·DIM(x) 求数组x第一维元素个数(注意当下界为1时元素个数与上界相同,否则元素个数不一定与上界相同) ·DIMk(x) 求数组x第k维元素个数。...如DIM2(x)计算二维数组x第二维长度。 ·LBOUND(x)求数组x第一维下界。 ·HBOUND(x)求数组x第一维上界。 ·LBOUNDk(x)求数组x第k维下界。...·HBOUNDk(x)求数组x第k维上界。 3 字符函数 ·TRIM(s)返回去掉字符串s尾随空格结果。 · UPCASE(s)把字符串s中小写字母转换为大写字母后结果。...·SUBSTR(s,p,n)从字符串s中第p个字符开始抽取n个字符长子串 ·TRANWRD(s,sl,s2)从字符串s中把所有字符串sl替换成字符串s2结果。

    2.6K90

    STL二分算法

    4.如何用STL二分查找范围内上界下界 我是废物, 搞了好久, 感觉里面有哪里不太对, 希望有大神能够仔细阅读, 帮助我解决难题 1.头文件 #include 2.使用方法...lower_bound(arr.begin(), arr.begin() + cnt, val) 函数功能: 函数lower_bound()first和last中前闭开区间进行二分查找,返回大于或等于...upper_bound(arr.begin(), arr.begin() + cnt, val) 函数功能: 函数upper_bound()first和last中前闭开区间进行二分查找,返回大于...关于自定义规则为何代表了某个含义, 见自定义规则代码注释 a 代表二分函数中 val b 代表待查找数组数据 4.如何用STL二分查找范围内上界下界 数组升序: lower_bound(iter.begin...// (3,+∞) 下界 auto f3 = lower_bound(y.begin(), y.end(), 3, cmp1) - y.begin(); // (-∞,3] 上界 auto f4

    69520
    领券