2016-09-12 1 views
0

私は機能barycenterの戻り値はapply_over_axes(barycenter, ...で得ているものと異なっている次の出力にnumpy apply_over_axes for keepdims = True?

src shape: (2, 2, 3) , **** trg shape: (2, 2) **** 
direct application = [[ 0.2 0.3] 
[ 0.4 0.7]] **** (trg shape = (2, 2)) **** 

src shape: (2, 2, 3) , **** trg shape: (2, 2) **** 
application through apply_over_axes = [[[ 0.2] 
    [ 0.3]] 

[[ 0.4] 
    [ 0.7]]] **** (trg shape = (2, 2, 1)) **** 

を生成し、次のコード

import numpy as np 
import sys 

def barycenter(arr, axis=0) : 
    bc = np.mean(arr, axis, keepdims=False) 
    print("src shape:", arr.shape, ", **** trg shape:", bc.shape, "****") 
    sys.stdout.flush() 
    return bc 

a = np.array([[[0.1, 0.2, 0.3], [0.2, 0.3, 0.4]], 
       [[0.4, 0.4, 0.4], [0.7, 0.6, 0.8]]], np.float) 

e = barycenter(a, 2) 
print("direct application =", e, "**** (trg shape =", e.shape, ") ****\n") 
f = np.apply_over_axes(barycenter, a, 2) 
print("application through apply_over_axes =", f, "**** (trg shape =", f.shape, ") ****\n") 

を持っています。

なぜそうですか?

答えて

1

結果は、docから直接次の

FUNCは、軸が軸の最初の要素 でのRES =のFUNC(軸)と呼ばれています。関数呼び出しの結果resには、次元数が1または2未満の ディメンションが含まれている必要があります。 resの寸法が1より小さい場合は、軸の前に寸法が挿入されます。 funcへの呼び出しは軸の各軸に対して 、最初の引数としてresが繰り返されます。

funcは次元を1減らすため、apply_over_axesは次元を挿入します。

+0

正確です。ドキュメンテーションからその部分を逃した。それから私はもう一度行って、それを見つけました...私は質問を取り除こうとしていました。 –

関連する問題