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

时间:2017-03-13 13:06:32

标签: python numpy numpy-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 ValueError:
        return False

或建立我自己的逻辑。内置了什么?

1 个答案:

答案 0 :(得分: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