2012-10-26 51 views
0

我有一個函數實例數組以及適用於這些實例的幾個參數數組。函數實例的數組可以是任意大小的。的定義如下(是的,每個功能採用相同的參數):Python:將參數映射到數組中的函數

fcn1(a, b, c) 
fcn2(a, b, c) 

每個功能參數爲float數組,例如:

a = numpy.array([1., 2., 3.]) 
b = numpy.array([1., 2., 3.]) 
c = numpy.array([1., 2., 3.]) 

功能實例的陣列看起來像以下內容:

[<function fcn1 at 0x030A44F0> <function fcn2 at 0x030A4530>] 

我想要的是將函數參數映射到每個數組實例。

到目前爲止,我試過喜歡簡單的東西:

for f in fcn: 
    print f(a, b, c) 

但功能構造方式,他們返回數組的X個,其中X爲元素的每個ab,並c數量。例如,如果我只需撥打:

fcn1(a, b, c) 

它將返回(在每個輸入參數的個數注意三個要素,三個數組返回):

[array([0.2343, 0.4943, ..., 0.8943, 0.7115]), array([0.2343, 0.4853, ..., 0.8555, 0.1915]), array([0.7773, 0.1343, ..., 0.8045, 0.9994])] 

所以,當我運行簡單的循環會發生什麼是兩個數組陣列:

[array([0.2343, 0.4943, ..., 0.8943, 0.7115]), array([0.2343, 0.4853, ..., 0.8555, 0.1915]), array([0.7773, 0.1343, ..., 0.8045, 0.9994])] 
[array([0.2343, 0.4943, ..., 0.8943, 0.7115]), array([0.2343, 0.4853, ..., 0.8555, 0.1915]), array([0.7773, 0.1343, ..., 0.8045, 0.9994])] 

有關如何優雅地將參數應用於函數實例的任何想法?

+1

你從循環中得到什麼問題? – Marcin

+0

它重複結果,因爲每個函數都返回X個數組,其中X是每個輸入參數中元素的數量。 –

+0

請將此信息整合到您的問題中。目前還不清楚這種重複是如何發生的,所以如果你可以將它與示例輸入和輸出聯繫起來,這將有助於你明顯地理解你的問題。 – Marcin

回答

1

不知道如果我正確認識你,但你只是想:

for f in fcn: 
    for ix in range(len(a)): 
     print f(a[ix], b[ix], c[ix]) 
+0

是的,這是想法,但我想避免循環a,b和c中的元素。這些函數全部被重寫,以利用矢量化。 –

+0

@ strimp099所以,問題是您想要將函數應用於列而不是行? – Marcin

+0

我用你的建議循環輸入數組中的元素。我不得不修改函數來接受浮點數而不是數組。 –

2

如果我讀這個權利,你要包含的名單列表的數據結構來結束你的功能結果。

function_result_set = [func(*argument_list) for func in function_list] 

這將爲的功能的任何任意長度序列(或實際上可調用,如類),只要每個功能能夠與len(argument_list)參數工作工作。