2017-03-13 48 views
1

numpy是否有方法来测试是否可以播放形状,而无需创建数组?总之,我正在寻找一个提供以下输出的函数。有没有一种方法可以测试两种形状是否可以用numpy播放?

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内置的工作与阵列,而不是真的只有形状。所以,我不知道任何内置的解决方案。这里有一个我能想出,基本上找singleton维度,即dimension lengths = 1和检查,如果维度长度匹配和满足任一条件的人给我们True为是broadcastable -

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

样品试验 -

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 
相关问题