2017-03-18 28 views
0

我在Python3中使用numpy,我有512X512矩陣,我需要讀取每個值併發送到函數 - 函數將執行一些計算並將返回3個值 - 現在我需要將這3個值添加到單獨的矩陣 - 我的矩陣將是512X512X512。如何通過numpy讀取矩陣的每個元素,然後添加到單獨的矩陣?

例如:主要基質

a=[1,2,3,4,5…23] [23,24,33,….23]…(512)….[11,22,33,44,55,…66] 

我想皮卡的每一個元素(如:1),然後在函數計算並返回3值 - 我們姑且稱之爲返回值:A1,A2,A3,然後我有加入像這裏單獨的矩陣:

tempA=[a1,…] 
tempB=[a2,…] 
tempC=[a3,…] 

我怎麼能用Python中的numpy做到這一點?

+0

你嘗試什麼嗎?如果您提供您的任何嘗試,社區將更快地跳入 – faboolous

+1

看起來更像是您將製作一個(512,512,3)陣列。功能如何一般?它只能用於標量輸入(而不是(512,512)的一行)?舉一個小例子,用一個實際函數和一個較小的數組(例如10x10)。 – hpaulj

+0

您可以詳細說明函數的作用嗎?取決於它的複雜性,可能避免了「矢量化」的需要 – Crispin

回答

1

,因爲我在How can I map python callable over numpy array in both elegant and efficient way?np.vectorize只是在玩,我可以把它應用到你的情況:每個3

In [462]: def foo(val): 
    ...:  return val, val*2, val*3 
    ...: 
In [463]: fv = np.vectorize(foo, otypes=[int,int,int]) 

一個otypes值從foo返回的值。

In [464]: X = np.arange(12).reshape(3,4) 
In [465]: X 
Out[465]: 
array([[ 0, 1, 2, 3], 
     [ 4, 5, 6, 7], 
     [ 8, 9, 10, 11]]) 

矢量化函數返回數組的一個元組,我們可以在一個三維數組解包和/或重新組合:

In [466]: tmp1, tmp2, tmp3 = fv(X) 
In [467]: tmp1 
Out[467]: 
array([[ 0, 1, 2, 3], 
     [ 4, 5, 6, 7], 
     [ 8, 9, 10, 11]]) 
In [468]: tmp2 
Out[468]: 
array([[ 0, 2, 4, 6], 
     [ 8, 10, 12, 14], 
     [16, 18, 20, 22]]) 
In [469]: tmp3 
Out[469]: 
array([[ 0, 3, 6, 9], 
     [12, 15, 18, 21], 
     [24, 27, 30, 33]]) 
In [470]: np.array((tmp1,tmp2,tmp3)) 
Out[470]: 
array([[[ 0, 1, 2, 3], 
     [ 4, 5, 6, 7], 
     [ 8, 9, 10, 11]], 

     [[ 0, 2, 4, 6], 
     [ 8, 10, 12, 14], 
     [16, 18, 20, 22]], 

     [[ 0, 3, 6, 9], 
     [12, 15, 18, 21], 
     [24, 27, 30, 33]]]) 
相關問題