2009-11-13 31 views
0

我有幾個函數返回對應於參數範圍的數據數組。將數組映射值返回給python中的參數

示例:對於2d陣列aa_{ij}值對應於參數集(param1_i, param2_j)如何返回結果保持參數值對應?

  • 呼喚每一個的param1_i, para2_j和函數返回一個值,將採取年齡(遠,如果你在一個去做更有效率)
  • 打破功能爲(多)小功能,讓使用難? (該點是得到的值的範圍內的參數,1個值是完全無用的)

我可以想出最好是使一個新的numpy的D型細胞,例如用於2D陣列:

tagged2d = np.dtype([('vals', float, 1), ('params', float, (2,))]) 

這樣a['vals'][i,j]包含值和a['params'][i,j]的相應參數。

有什麼想法?也許我應該只返回2個數組,其中一個使用值,其他使用參數元組?

回答

2

我推薦你最後的建議......只是返回兩個數組{'values': a, 'params':params}

這有幾個原因。

  1. 首先,您的其他解決方案(使用dtype和recarrays)將許多事情纏在一起。例如,從a導出的數量與相同的參數相對應的數量是多少?您是否爲此創建了一個新的重新數組和一個新的參數副本?即使像2*a這樣簡單的事情成爲顯着的數量將需要你做出困難的決定。

  2. Recarrays有侷限性,這是那麼容易的,因爲它不值得接受這些限制其他方式解決。

如果你想返回的條款之間的相互關係更容易,你可以把物品在類。例如,你可以有,需要一個PARAM對並返回相應的結果的方法。這樣一來,你就不會被recarray限制,你仍然可以構造一個你喜歡的兩者之間的任何方便的關係,並很容易地向後兼容改變行爲等