2015-08-18 40 views
2

考慮下面的函數:測試其numpy的函數參數具有一個以上的元件

def foo(a, b, c): 
    """ Toy function 

    """ 
    return a, b, c 

每個這些參數將是numpy.array類型。我需要高效地確定哪些參數有多個元素供函數進一步使用。我想避免使用if陳述來測試每個參數,因爲列表可能很大並且性能很重要。假設只有一個參數會有多個元素。

如何確定哪個輸入參數具有多個元素?

+0

你可以改變你的函數是怎麼叫什麼名字?如果是這樣,你可能可以得到你需要與kwargs:http://stackoverflow.com/questions/3394835/args-and-kwargs – cfrag

+1

使用例如什麼問題'numpy.array.size'?在最慢的cpus上它不應該超過1ms,並且大部分與數組大小無關。 –

+0

我想避免寫一堆'if'語句來測試每個參數。 –

回答

0

您可以使用locals()獲得的所有參數的dict,然後使用sizeargmax發現這是最大的,就像這樣:

import numpy as np 

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

def foo(a,b,c): 
    args=locals() 
    return args.items()[np.array([i[1].size for i in args.items()]).argmax()][1] 

biggest = foo(a,b,c) 
print biggest 
# [1,2,3] 
+0

或者以'def foo(* args)'的形式傳遞值,然後用這個理解測試'args'。 – hpaulj

相關問題