标题的问题比身体的问题要普遍得多,所以我稍后会谈谈。
maxval(array)
的结果是标量,是array
中的最大值(如果它的大小非零)。
在你的例子中,x
是一个等级2的单个数组(通常被认为是一个矩阵)。因此,maxval(x)
的确是你称之为矩阵的全局最大值。需要maxval
的替代形式来逐行提供最大值:maxval(x,dim=2)
。
现在,还有别的东西从你的例子来说明:
x = x/amax
有关于x
和amax
形状要求。
你不给amax
声明,但有两种可能:
amax
具有相同的形状x
;或
amax
是一个标量。
[注意amax
不必是标量,只是因为它是从maxval
参考分配一个标量的结果。但是,你会看到,amax
不会被宣布为1级,使用尺寸x
行数,所以这是另一条线索是maxval
正在给全球最大]
这两种可能性都来自一致性规则进行划分。用amax
标量x
的每个元素除以该值;与amax
阵列的每个元素x
被amax
中的相应元素分开。
如果你想标准化每个单独的行x
那么你就不能使用该分割表达式与amax
秩1数组。
来到更具普遍性的问题:即使它是一个非此即彼/或问题的答案是“不”。没有单一的方式。每个功能按照其定义的方式工作。
作为一般规则,虽然,Fortran语言的内在功能很少关心其中有“行”阵列的具体情况。但有一个有用的想法是,一个函数可以:
- 对所有元素单独返回一个相同形状的数组;
- 作为一个整体,返回一个标量。
由许多人将此dim
参数调节,导致函数作用于片而不是。
的Fortran甚至有一个用于该上数组元素单独地操作这些内部函数,它们被称为'elemental'名称。在用户定义的函数中可以使用关键字'elemental'来告诉编译器它们可以安全地应用于数组。 “最大”不是那些基本功能之一。 –