将空数组传递给sum()和product()

时间:2018-01-27 19:32:58

标签: python arrays fortran

在以下代码中,我将空数组传递给内部sum()product()函数。

program test
    implicit none
    integer, allocatable :: A(:)

    allocate( A( 0 ) )

    print *, "sum     = ", sum( A )
    print *, "product = ", product( A )
end

然后,我尝试的所有编译器都给出了相同的结果:

 sum     =  0
 product =  1

所以我想知道(1)是否允许将空数组传递给这些函数,(2)如果是这样,结果保证为0和1(根据Fortran标准)。为了比较,其他一些语言(例如Python3)也给出0和1,(我猜)可能与sum( [1,2,...,n] )product( [1,2,...,n] )n -> 0的限制有关。

>>> import numpy as np
>>> np.sum( [] )
0.0
>>> np.prod( [] )
1.0

2 个答案:

答案 0 :(得分:5)

是的,允许将零大小的数组传递给那些内在函数(以及许多其他数组),是的,这些结果是Fortran标准明确要求的。

same_path = maximise(arr[1:], sum+arr[0], orig_sum+arr[0], 0, arr[0]) (F2008,13.7.133):

  

PRODUCT(ARRAY)的结果值等于ARRAY所有元素乘积的处理器相关近似值,如果ARRAY的大小为零,则值为1。

product(F2008,13.7.161):

  

SUM(ARRAY)的结果的值等于ARRAY所有元素之和的处理器相关近似值,如果ARRAY的大小为零,则其值为零。

答案 1 :(得分:0)

这些内在函数具有与f90相同的指定行为,并且一旦错误报告被处理,那些错误的编译器就会得到纠正。您可能正在考虑像maxloc这样的相关内在函数,这些内在函数在f2003中首次定义为0大小,但某些编译器仍然可以选择违反标准,支持使用非零大小的正确行为进行优化。