矩阵上的函数是否应用于整个矩阵或Fortran中的每一行?

矩阵上的函数是否应用于整个矩阵或Fortran中的每一行?,fortran,fortran90,Fortran,Fortran90,我从来没有用Fortran写过,但我正在尝试将一个脚本改编成R,下面几行让我很困惑。这就是变量的定义方式: 实数,维数n,nd::x 这是否意味着x是n个数组,填充了第nd个实数值或一个nx-nd矩阵 然后 应用。变量amax是x中绝对值的全局最大值,还是n个最大值的数组,每行一个?了解x=x/amax是否应用于每一行或整个矩阵很重要。此函数的目的似乎是某种规格化。第一行表示变量x是一个二维n,nd的数组,而不是n个nd值数组。函数maxval返回此数组中的最大值 参见PDF中的第130页,而不

我从来没有用Fortran写过,但我正在尝试将一个脚本改编成R,下面几行让我很困惑。这就是变量的定义方式:

实数,维数n,nd::x

这是否意味着x是n个数组,填充了第nd个实数值或一个nx-nd矩阵

然后


应用。变量amax是x中绝对值的全局最大值,还是n个最大值的数组,每行一个?了解x=x/amax是否应用于每一行或整个矩阵很重要。此函数的目的似乎是某种规格化。

第一行表示变量x是一个二维n,nd的数组,而不是n个nd值数组。函数maxval返回此数组中的最大值


参见PDF中的第130页,而不是打印的数字,您还可以在同一文档中找到一整章关于数组的内容。

为了补充Baruchel的回答:x/amax将二维数组x的每个元素除以标量amax。

标题问题比正文问题更一般,因此我将在后面讨论

maxvalarray的结果是一个标量,如果它的大小不是零,则是数组中的最大值

在您的示例中,x是秩为2的单个数组,通常被认为是矩阵。因此,maxvalx实际上就是你所说的那个矩阵的全局最大值。需要另一种形式的maxval来逐行给出最大值:maxvalx,dim=2

现在,从您的示例中还需要注意以下事项:

x = x/amax
对x和amax的形状有要求

您没有声明amax,但有两种可能性:

amax与x具有相同的形状;或 amax是一个标量。 [请注意,amax不必是标量,因为它被分配了来自该maxval引用的标量结果。但是,您将看到,amax不会被声明为大小为x行数的秩1,因此这是maxval给出全局最大值的另一个线索。]

这两种可能性来自于划分的一致性规则。对于amax,标量x的每个元素都除以该值;使用amax数组,x的每个元素被amax中相应的元素所除

如果您想规范化x的每一行,那么就不能将该除法表达式用于amax秩1数组

谈到更一般的问题:即使是非此即彼的问题,答案是否定的。没有单一的方法。每个函数按其定义的方式运行

不过,作为一般规则,Fortran的内在函数很少关心具有行的数组的具体情况。但一个有用的想法是,函数的作用是:

在所有元素上分别返回相同形状的数组; 在整个数组上,返回标量。
由于许多函数都会有这个模糊的参数,而这个参数会导致函数作用于片,这一事实使Fortran变得温和。

Fortran甚至为那些单独作用于数组元素的内在函数命名,它们被称为元素函数。关键字elemental可用于用户定义的函数,以告知编译器可以安全地将其应用于数组的元素。极大不是这些基本函数之一。
x = x/amax