Python 是否有一种方法可以测试两个形状是否可以在numpy中广播?

Python 是否有一种方法可以测试两个形状是否可以在numpy中广播?,python,numpy,array-broadcasting,Python,Numpy,Array Broadcasting,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 Va

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

或者建立我自己的逻辑。有内置的东西吗?

好吧,内置的东西是用于阵列的,而不是仅用于形状。因此,我不知道任何内置的解决方案。这里有一个我可以想出的方法,基本上是寻找
singleton
维度,即
dimension length=1
,检查维度长度是否匹配,并满足其中一个标准,我们就可以
可广播
True
-

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