一個global
計數器應該工作,所以將一個可變的反
Out[1471]: array([12, 15, 18, 21])
In [1472]: A=np.arange(12).reshape(3,4)
In [1473]: def foo(x):
...: counter[0] +=1
...: print(counter)
...: return sum(x)
...:
In [1474]: counter=[0]
In [1475]: np.apply_along_axis(foo,0,A)
[1]
[2]
[3]
[4]
Out[1475]: array([12, 15, 18, 21])
注
In [1476]: [sum(col) for col in A.T]
Out[1476]: [12, 15, 18, 21]
In [1477]: A.sum(axis=0)
Out[1477]: array([12, 15, 18, 21])
你爲什麼要使用apply_along_axis
,在這種情況下apply_along_axis
是什麼? inputX
的尺寸是多少?
在2D情況下,apply_along_axis
基本上是:
[sum(A[(slice(None),i)]) for i in range(A.shape[1])]
如果A
更高尺寸的,它需要在(slice(None),i,j...)
遍歷所有i,j...
照顧。但是還有其他方式來產生這些指數。它提供了便利,而不是速度或功能。
調用lambda並不比調用使用'def'創建的等價函數快。 –
@ PM2Ring是不是有這樣的功能導致本地人導致不得不垃圾收集/解構?另外,請注意我試圖避免的「打印1」(IO相對較慢)。 –
當然,打印肯定會減慢執行速度。我只發佈了我以前的評論,因爲最後一段(某種)暗示使用lambda會比常規的'def'函數更快,並且情況並非如此,假設lambda和常規函數包含相同的代碼。 –