2017-03-13 1 views
1

numpyには、配列を作成せずにシェイプをブロードキャストできるかどうかをテストするメソッドがありますか?要するに、以下の出力を提供する関数を探しています。もちろんnumpyで2つの図形をブロードキャストできるかどうかをテストする方法はありますか?

can_broadcast((1, 2), (2, 1)) # True 
can_broadcast((1, 2), (2, 3)) # False 

、私は

def can_broadcast(s1, s2): 
    try: 
     np.empty(s1) + np.empty(s2) 
     return True 
    except ValueError: 
     return False 

を使用して動作をエミュレートするか、自分のロジックを構築することができます。何かが組み込まれていますか?

答えて

1

AFAIK組み込み関数は、実際には形状だけではなく、配列で動作します。だから、私はそれを解決することができるビルトインを知らない。

def can_broadcast(s1, s2): 
    s1a = np.asarray(s1) 
    s2a = np.asarray(s2) 
    return ((s1a == 1) | (s2a==1) | (s2a == s1a)).all() 

サンプルの実行 - -

次元の長さが一致し、満足のいずれかの基準の一つは broadcastableであるために私たちに Trueを与える場合はここで私は基本的に singleton寸法を探している、とまで来ることができました1、すなわち dimension lengths = 1だと確認します
In [335]: s1 = (1, 2, 1, 3) 
    ...: s2 = (2, 3, 3, 3) 
    ...: s3 = (1, 1, 3, 3) 
    ...: 

In [336]: print can_broadcast(s1, s2) 
    ...: print can_broadcast(s1, s3) 
    ...: print can_broadcast(s2, s3) 
    ...: 
False 
True 
True 
関連する問題