,因爲我在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]]])
你嘗試什麼嗎?如果您提供您的任何嘗試,社區將更快地跳入 – faboolous
看起來更像是您將製作一個(512,512,3)陣列。功能如何一般?它只能用於標量輸入(而不是(512,512)的一行)?舉一個小例子,用一個實際函數和一個較小的數組(例如10x10)。 – hpaulj
您可以詳細說明函數的作用嗎?取決於它的複雜性,可能避免了「矢量化」的需要 – Crispin