我試圖做一個函數,如numpy.inner
,但總結了第一個兩個數組的軸而不是最後一個軸。目前我使用tensordot
與rollaxis
:計算numpy.inner()在第一個(而不是最後一個)軸
def inner1(a, b):
return numpy.tensordot(numpy.rollaxis(a, 0, len(a.shape)), b, 1)
但我想知道:有沒有更好的辦法?也許一個不需要我滾動軸?
我覺得einsum
應該使這成爲可能,但我不知道如何在這裏使用它。
當我指定下標字符串時,似乎需要我對a
和b
進行硬編碼,在此我無法真正做到,因爲對輸入的維度沒有特別的要求。
(注:我上午知道有到求和第一軸,而不是最後的性能影響,但我在這裏忽略它們)
您確定這種方式有效嗎?這失敗了:'einsum('i ...,i ...-> ...',((1,2)),((1,3)))' – Mehrdad 2014-10-26 23:18:19
這一切都取決於你想要什麼去做。在這種情況下,我認爲你想,'einsum('ij ...,ik ...-> jk ...',((1,2)),((1,3)))''。 – farenorth 2014-10-26 23:21:57
我想你可能錯過了這個問題的要點?我無法控制輸入形狀。據我所知,他們可能是「(1,2,3,4)」和「(1,5,6,7)';重點是除了第一個維度之外的所有維度都應該是不相關的,所以當我不知道字符串應該是什麼時,我將如何使用'einsum'? – Mehrdad 2014-10-26 23:23:19