標題的問題比身體的問題要普遍得多,所以我稍後會談談。
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'來告訴編譯器它們可以安全地應用於數組。 「最大」不是那些基本功能之一。 –